标题:[求助]一个不会做的题目
取消只看楼主
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
 问题点数:0 回复次数:6 
[求助]一个不会做的题目
现在有一个数组,里面存放的都是整数

现在对每个数的各个位数加起来的和从小到大排列
然后再把排列后的顺序按原数组值输出

比如a[]={46,22,15}
输出的是:22 15 46


我想了一个方法,但感觉效率不好,有没有更简洁的方法呢

大家一起讨论下吧
2007-04-17 12:23
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
得分:0 

可以定为 int

我的思路是又设了个a数组,把各位数的和放到这个新数组1中

然后对新数组1序放到另一个数年数组2中
对数组2各元素查找它在数组1中的位置i,然后打出来a[i]

就这样,三个数组太麻烦了
有没有简单点的呢


“运行正确”的程序不见得是高质量的程序
2007-04-17 13:03
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
得分:0 
你写一个出来看看,看跟我的方法一样不

“运行正确”的程序不见得是高质量的程序
2007-04-17 13:28
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
得分:0 

你自己设定就行了,

反正不overflow就行了

两位,一位,三位都可以呵呵


“运行正确”的程序不见得是高质量的程序
2007-04-17 13:45
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
得分:0 

#include<stdlib.h>
#include<iostream>
using namespace std;

int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}

int convert(int tem)
{
int sum=0;
while(tem)
{
sum=sum+tem%10;
tem=tem/10;

}
return sum;
}

int main()
{

int num[3]={ 193, 392, 24};
int b[3]={0};
int c[3]={0};
int i,j;

for(i=0;i<3;i++)
cout<<num[i]<<" ";
cout<<endl;

for(i=0;i<3;i++)
{
b[i]=convert(num[i]);
c[i]=convert(num[i]);
}


qsort(c,3,sizeof(c[0]),cmp);

for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(b[j]==c[i]) cout<<num[j]<<" ";
}


return 0;
}


“运行正确”的程序不见得是高质量的程序
2007-04-17 19:44
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
得分:0 

谢谢各位了,上面就是我写的那个笨重算法
呵呵

楼上的那个看不明白,不知道那个调用


楼上上的那个还挺简洁的,有一点不妥就是不支持多2位数的,我写那个太笨重了


“运行正确”的程序不见得是高质量的程序
2007-04-17 19:47
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
得分:0 
恩都不错,

奖励奖励

“运行正确”的程序不见得是高质量的程序
2007-04-17 20:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-132530-1-1.html




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

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