| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖, 2 人收藏
标题:今天在中国程序员论坛上看到一个题目,大家看看还有没有其它的解法
取消只看楼主 加入收藏
snailqiu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:45
注 册:2007-9-26
结帖率:100%
收藏(2)
已结贴  问题点数:10 回复次数:2 
今天在中国程序员论坛上看到一个题目,大家看看还有没有其它的解法
题目:输入一个数组,输入结束时打印出排序,如输入的数组为98 82 2 73 80    则输出为
98    1
82    2
2     5
73    4
80    3
以下是楼主的答案:
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
#define MIN 0
int main(void)
{
    int score[MAX+1]={0};
    int juni[MAX+2]={0};
    int count=0,i;
    do
        {
       printf("输入分数,-1结束:");
       scanf("%d", &score[count++]);
    }
        while(score[count-1]!=-1);
    count--;
    for(i=0;i<count;i++)
        juni[score[i]]++;
    juni[MAX+1]=1;
    for(i=MAX;i>=MIN;i--)
        juni[i]=juni[i]+juni[i+1];
    printf("得分\t排行\n");
    for(i=0;i<count;i++)
        printf("%d\t%d\n",score[i],juni[score[i]+1]);
    return 0;
}

下面是我的解法:
#include<stdio.h>
#include<stdlib.h>
void sort(int *pArr,int len);
int main()
{
    int i=0,j=0,k=0,flag=1;
    int *Arr1;//用户输入的数组
    int *Arr2;//再造一个数组
    printf("请依次输入数组的各项(用空格隔开),输入-1时输入结束\n");
    Arr1=(int *)malloc(1*sizeof(int));
   
    while(flag)//此循环为当输入的值不为-1时,将输入结果存储到一个动态数组中
    {
        scanf("%d",&Arr1[i]);
        if(Arr1[i]==-1)
           break;
        else
        {
            Arr1=(int *)realloc(Arr1,1*sizeof(int));//在原来的基础上再动态分配内存
            k++;
            i++;
            flag=1;
        }
    }

 
    Arr2=(int *)malloc(k*sizeof(int)); //再动态构造一个长度为k项的数组   
     for(j=0;j<k;j++)
        Arr2[j]=Arr1[j];//将Arr1赋给Arr1
     sort(Arr2,k);  //对Arr2从大到小进行排序
      printf("得分\t排行\n");   
    for(j=0;j<k;j++)//在一个循环中对这两个数组进行比较
       for(i=0;i<k;i++)
         {
             if(Arr1[j]==Arr2[i])//如果找到了相同的项
               printf("%d\t:%d\n",Arr1[j],i+1);//输出Arr1中相应的项以及Arr2中相应的下标加1
         }
   
   
    return 0;
}
void sort(int *pArr,int len)//从大到小排序
{
    int i,j,t;
   
    for(i=0;i<len-1;i++)
    {
        for(j=0;j<len-1-i;j++)
        {
            if(pArr[j]<pArr[j+1])
            {
                t=pArr[j];
                pArr[j]=pArr[j+1];
                pArr[j+1]=t;
            }
        }
  
    }
}
他用的是定长数组,我用了动态数组。
请大家提提意见。
搜索更多相关主题的帖子: include 程序员 count 中国 
2013-07-14 16:43
snailqiu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:45
注 册:2007-9-26
收藏
得分:0 
楼上两位都是高手啊。
其实我学C没多久,算法什么的还不太懂。
非常感谢两位指出我的缺点。
2013-07-14 19:34
snailqiu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:45
注 册:2007-9-26
收藏
得分:0 
回复 6楼 那小扎
照你这么说,我竟然这么荣幸被他点评了一下。看来我的这个帖子还是有一定的价值的。呵呵
2013-07-14 19:54
快速回复:今天在中国程序员论坛上看到一个题目,大家看看还有没有其它的解法
数据加载中...
 
   



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

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