| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3009 人关注过本帖
标题:输入 10 个数字,然后输出其中最大的 3 个数字,用我的思路怎么做
只看楼主 加入收藏
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:2 
先更正你的错误:输出语句在for语句外面,循环结束后再输出max的值怎么可能有多个呢,放在里面的也不对,如果放在里面则会输出所有比a[0]大的值
排序的方法很多,你可以网上查查。冒泡法最基本,但是电脑的计算量也会多一些。
冒泡法:所有的数从大到小按顺序排列(从小到大也行)
#include <stdio.h>
void main()
{
    int a,b,t,k;
    int score[10];
    for(a=0;a<10;a++)
    {
    printf("%d人目の点数を入力してください",a+1);
    scanf_s("%d",&score[a]);
    }
for(a=0;a<10-1;a++)        //冒泡法的意思就是一个元素和后面所有的元素比较,碰见比它大的两个值就互换,这样大的值就代替了这个元素,这叫做冒泡,小的那个就等于“沉底”,从score[0]开始,最后score[8]和a[9]比较,a[9]没有数可比较了                                    
  {   k=a;         //先默认最大的值是score[a]                        
   for(b=0;b<9-a;b++)     //每一个元素后面有9-a个元素可以比较,比如score[0]后面有9个数可以比较
    {   
        if(score[0]<score[b])          //满足条件,值互换
            {
                t=score[0];
                score[0]=score[b];
                score[b]=t;
                k=b;              //记住score[b]的位置,循环结束后得出的k就是最大值的下标,否则最大值的坐标就是默认的k=a
             }
      }
        printf("%d  %dth",score[a],k+1);//输出从大到小的值,并输出这些值原本的位置(即第几个数)如果你只要输出前面3个数,只要在这个语句前面加个if(a>=3) break;就行了。如果还要置0的话,后面再加一句score[a]=0就行了,其实冒泡法都不需要置0,你题目中置0的意思其实是为了找第2大,第3大的时候为了怕再和这个最大的值比较的时候又以为这个值就是你要找到值。
   }
}
收到的鲜花
  • ctl1847626512014-06-02 22:34 送鲜花  3朵   附言:原创内容,谢谢,学习了
2014-06-02 07:29
ctl184762651
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2014-5-31
收藏
得分:0 
回复 10 楼 jeff6197754
老师上课教我们用for,while之类的语法。然后出作业让我们自己做,没课本的。楼主在国外上学
2014-06-02 22:27
ctl184762651
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2014-5-31
收藏
得分:0 
回复 11 楼 xsw07122269
我运行了你的代码,发现输出的值不对
2014-06-03 01:19
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:0 
回复 13 楼 ctl184762651
我写错了...第2个for里面的初始赋值应该是b=a+1才对。从后面那个数开始比较,前面的就不用比了。
我写一下冒泡法吧,我之前那个算法算出来的K值也不对的,值互换后原来的数值顺序就乱了,好多逻辑错误。。。。
#include <stdio.h>
void main()
{
    int a,b,t,k;
    int score[10];
    for(a=0;a<10;a++)
    {

    scanf("%d",&score[a]);
    }
for(a=0;a<9;a++)        //冒泡法的意思就是一个元素和后面的元素比较,比它大的两个值就互换,这样大的值就代替了这个元素,这叫做冒泡,小的那个就等于“沉底”,从score[0]开始,最后score[8]和a[9]比较,a[9]没有数可比较了                                    
                     
   for(b=0;b<9-a;b++)     //每一个元素后面有9-a个元素可以比较,比如score[0]后面有9个数可以比较
    {   
        if(score[b]<=score[b+1])          //满足条件,值互换 循环结束后最小的值就沉入到底部了
            {
                t=score[b];
                score[b]=score[b+1];
                score[b+1]=t;
               
             }
   }
for(a=0;a<10;a++)
   printf("%d\n",score[a]);//输出从大到小的值
  
}
你的那种方法可以改成:
#include <stdio.h>
int main()
{
    int i,j,max,k;
    int a[10]={9,6,3,8,5,2,7,4,1,6};  //里面的整数可以自己改
    for(i=0;i<10;i++)
    {
        max=a[i];
        k=i;               //做个标志
        for(j=0;j<10;j++)
        {
            if(a[j]>=max)
            {
                max=a[j];
                k=j;       // 最大的那个数的坐标
            }
        }
        a[k]=0;           //最大的数置0,不置0的话max的值不会变
        printf("%d  %dth\n",max,k+1);
    }
        for(i=0;i<10;i++)            
            printf("%d\t",a[i]);      //可以发现所有的数最后都置为0了。
    return 0;
}

[ 本帖最后由 xsw07122269 于 2014-6-3 03:32 编辑 ]
2014-06-03 01:26
ctl184762651
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2014-5-31
收藏
得分:0 
回复 14 楼 xsw07122269
冒泡排序要怎么才能求出原来的位置。比如第一大是原来的【4】,第二大是原来的【1】
2014-06-03 22:09
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:0 
回复 15 楼 ctl184762651
不好排,除非另写一个程序先计算出位置来。因为冒泡排序原来的数字排序一直在变动。
2014-06-04 00:13
快速回复:输入 10 个数字,然后输出其中最大的 3 个数字,用我的思路怎么做
数据加载中...
 
   



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

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