C++问题。这个题是这样的:输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大

C++问题。这个题是这样的:输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序。我写的程序出来结果不对。看不出来是哪里错了,求大神修改一下。我写的... C++问题。这个题是这样的:输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序。
我写的程序出来结果不对。看不出来是哪里错了,求大神修改一下。我写的程序如下:
#include <stdio.h>
#include <string.h>

int cal(int x)
{
int ans=0;
while(x!=0)
{
ans+=x%10;
x/=10;
}
return ans;
}
int min(int x,int y)
{
if(x<y)
return x;
else return y;
}

int cmp(int i,int j)
{
if(cal(i)<cal(j))
return i;
if(cal(i)>cal(j))
return j;

else
return min(i,j);

}

void main()
{
int str[10];
for(int i=0;i<10;i++)
{
scanf("%d",&str[i]);

}
for(i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
str[i]=cmp(str[i],str[j+1]);
}
printf("%d ",str[i]);

}

}
展开
 我来答
围城88
2014-07-03 · 超过10用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:26.7万
展开全部

你想要的结果是什么

举个例,输入10,9,8,7,6,5,4,3,2,1

你要他输出什么


不知道这个是不是你想要的结果


我想其中一个原因是你没有交换至比如str中第10个元素师最小的,那i=0是会把它赋给str[0],i=1是会把它赋给str[1]........结果是str中所有元素都是同一个值,而且是最小值

解决办法是把两个值交换再输出


还有一个是你整个程序都有些问题,想想当j=9是str[j+1]是str[10],而str数组只有十个元素

还有其他很多问题不一一说了,下面是我改的程序,其他不改,只改main函数,我是非得在你的基础上改,而且一些问题还没改过来,要是重写的话可以写的更好,但没时间给你写了,自己琢磨吧


int str[10];

int temp;

for(int i=0;i<10;i++)

 {

scanf("%d",&str[i]);


 }


  for(i=0;i<9;i++)

  {

 for(int j=i+1;j<10;j++)

 {

 temp=str[i];

 str[i]=cmp(str[i],str[j]);

 if(str[i]!=temp)

 str[j]=temp;

 }

 printf("%d ",str[i]);   

  }

  printf("%d ",str[9]);   

b94338240
2014-07-03 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:151
采纳率:100%
帮助的人:101万
展开全部
回去看下数据结构 排序一章阿
插入排序,归并排序,快速排序...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式