| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1709 人关注过本帖, 1 人收藏
标题:一个简单的问题,高手勿见笑
只看楼主 加入收藏
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:23 
一个简单的问题,高手勿见笑
我是想在五个数中依次找出前三个大数并显示他们在数组中的位置,比如5个数为5,4,3,2,1,则答案应为
5,0
4,1
3,2
现在发现当数组中有重复数字时比如 5,5,5,4,3
答案应为
5,0
5,1
5,2
但运行后的答案却是
5,2
5,2
5,2
不知为什么  求高手指教,谢谢
main()
{
int *a,*b,*c,i,j,k,s1,s2,s3,n,t[5];
a=&t[0];
b=&t[1];
c=&t[2];
printf("\n");
for(i=0;i<=4;i++)
scanf("%d,",&t[i]);
for(i=0;i<=4;i++)
 {
 if(*a<t[i])
 a=&t[i];
 }
for(i=0;i<=4;i++)
{
if(*a==t[i])
s1=i;
}
printf("%d,%d\n",*a,s1);
for(j=0;j<=4;j++)
 {
 if(*b<t[j]&&s1!=j)
 b=&t[j];
 }
for(j=0;j<=4;j++)
 {
 if(*b==t[j])
 s2=j;
 }
printf("%d,%d\n",*b,s2);
for(k=0;k<=4;k++)
 {
 if(*c<t[k]&&s1!=k&&s2!=k)
 c=&t[k];
 }
for(k=0;k<=4;k++)
 {
 if(*c==t[k])
 s3=k;
 }
printf("%d,%d",*c,s3);
}


[ 本帖最后由 zzgzzg00 于 2010-9-10 09:28 编辑 ]
搜索更多相关主题的帖子: 见笑 
2010-09-09 21:27
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:2 
还是不 懂你意思啊 !!!!







我只能按我理解
main()
{
int *a,*b,*c,i,j,k,s1,s2,s3,n,t[5];
a=&t[0];
b=&t[0];
c=&t[0];
printf("\n");
for(i=0;i<=4;i++)
scanf("%d,",&t[i]);
for(i=0;i<=4;i++)
{
if(*a<t[i])
a=&t[i];
}
for(i=0;i<=4;i++)
{
if(*a==t[i])
s1=i;
}
printf("%d,%d\n",*a,s1);
for(j=0;j<=4;j++)
{
if(*b<=t[j]&&s1!=j)
b=&t[j];
}
for(j=0;j<=4;j++)
{
if(*b==t[j])
s2=j;
}
printf("%d,%d\n",*b,s2);
for(k=0;k<=4;k++)
{
if(*c<=t[k]&&s1!=k&&s2!=k)
c=&t[k];
}
for(k=0;k<=4;k++)
{
if(*c==t[k])
s3=k;
}
printf("%d,%d",*c,s3);
}

[ 本帖最后由 A13433758072 于 2010-9-9 23:40 编辑 ]

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-09-09 22:57
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
我是想在五个数中依次找出前三个大数并显示他们在数组中的位置,比如5个数为5,4,3,2,1,则答案应为
5,0
4,1
3,2
现在发现当数组中有重复数字时比如 5,5,5,4,3
答案应为
5,0
5,1
5,2
但运行后的答案却是
5,2
5,2
5,2
不知为什么  求高手指教,谢谢


[ 本帖最后由 zzgzzg00 于 2010-9-10 09:27 编辑 ]

粗心是大敌
2010-09-09 23:15
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
没发现有什么问题啊。楼主把你输入输出的结果描述一下!
2010-09-10 09:19
mysky2001
Rank: 2
等 级:论坛游民
帖 子:10
专家分:18
注 册:2010-5-22
收藏
得分:2 
#include<stdio.h>
main()
{
    int a[5] , b[5] = {0 , 1 , 2 , 3  , 4}, m ,n ,k;
    for(int i = 0 ; i < 5; i ++)
    {
        scanf("%d",&a[i]);
    }

    for(i = 0; i < 5 && k < 3 ; i ++)
    {
        for(int j = i + 1; j < 5 ; j ++)
        {
            if(a[i] < a[j])
            {
                m = a[i];
                a[i] = a[j];
                a[j] = m;
                n = b[i];
                b[i] = b[j];
                b[j] = n;
            }
        }
    }

    for(i = 0 , k = 0; i < 5 && k < 3; i ++ , k ++)
    {
        printf("%d ",a[i]);
        printf("%d ",b[i] + 1);
        for(int j = i + 1 ; j < 5 ; j ++)
        {

            if(a[i] == a[j])
            {
                printf(" %d",b[j] + 1);
                i = j;
            }
        }
            printf("\n");
    }
}
随便写的。。不知道是不是你想要的
2010-09-10 10:45
燕强
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:188
注 册:2010-8-11
收藏
得分:2 
以下是根据你自己的思路做的。

#include<stdio.h>
int main(void)
{
int *a,*b,*c,i,j,k,s1,s2,s3,n,t[5];

printf("\n");
for(i=0;i<=4;i++)
scanf("%d,",&t[i]);
a=&t[0];
b=&t[1];
c=&t[2];
for(i=0;i<=4;i++)
{
if(*a<t[i])
a=&t[i];
}
for(i=0;i<=4;i++)
{
if(*a==t[i])
{
s1=i;       //这里找到第一个就赋值并跳出循环,要不然就会指向最后一个最大值的
break;}

}
printf("%d,%d\n",*a,s1);
for(j=0;j<=4;j++)
{
if(*b<t[j]&& s1!=j)  b=&t[j];
}
for(j=0;j<=4;j++)
{
if(*b==t[j]&& s1!=j)
{
s2=j;       //同样的。这里在找到时要判断是不是第二个最大值,是则跳出循环。
break;     //下面也一样,。这样改了看看是不是你要的结果。
}
}
printf("%d,%d\n",*b,s2);
for(k=0;k<=4;k++)
{
if(*c<t[k]&&s1!=k&&s2!=k)
c=&t[k];
}
for(k=0;k<=4;k++)
{
if(*c==t[k]&&s1!=k&&s2!=k)
{
s3=k;
break;
}
}
printf("%d,%d",*c,s3);
}
2010-09-10 13:44
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
呵呵  还是不行啊    比如输入4个5,加上break后得出的就是
5,0
5,0
5,0
不加就是
5,4
5,4
5,4
也就是说在有数字相同时s1!=j和s1!=k&&s2!=k命令就不奏效了

粗心是大敌
2010-09-10 14:45
燕强
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:188
注 册:2010-8-11
收藏
得分:0 
回复 7楼 zzgzzg00
你没看到下面判断时也用了break吗、怎么可能会出现一样的啊。
你可以把上面的代码复制运行试试。应该能正确运行啊。

[ 本帖最后由 燕强 于 2010-9-10 15:01 编辑 ]
2010-09-10 14:59
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:2 
当你输入5.4.3.2.1的时候,首先找到最大的数,前两个循环,找到5,那么下标是0把
当你运行3和4两个循环的时候,if(*b<t[j]&&s1!=j)找不到比t[0]大的数,所以还是5,下标当然还是0
当你运行5和6两个循环的时候,if(*c<t[k]&&s1!=k&&s2!=k)同样找不到比t[0]=5大的数,所以还是5,小标是0
因此输出就是:
5,0
5,0
5,0
2010-09-10 15:51
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
回复 8楼 燕强
都加了啊,而且我也明白您的意思,但输入5个5后得出的结果依然是
5,0
5,0
5,0
也就是s1!=j和s1!=k&&s2!=k没起到作用,得出的结果是s1=j和s1=k
如果不加的话得出的结果是
5,4
5,4
5,4
即当系统找到要找的数后依然循环运行找下一个  直至循环结束,的到最后的那个数,是没有break的错。
是不是我的tc有毛病啊?

[ 本帖最后由 zzgzzg00 于 2010-9-10 16:03 编辑 ]

粗心是大敌
2010-09-10 15:58
快速回复:一个简单的问题,高手勿见笑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033522 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved