| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:[求助]一个不会做的题目
只看楼主 加入收藏
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
 问题点数:0 回复次数:18 
[求助]一个不会做的题目
现在有一个数组,里面存放的都是整数

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

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


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

大家一起讨论下吧
2007-04-17 12:23
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
都是两位数吗?

把你写的发上来看看塞....

sum=n%10+n/10;

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-04-17 12:48
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
数组里存的是几位数有规定吗?不规定个最大几位数的话就不好操作!

Fight  to win  or  die...
2007-04-17 12:51
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
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
只要把数组中每个元素用ele%10 + ele/10 + ……这样计算出来各位和

在用排序排出来就是,随便用什么冒泡,插入的都可以。

Fight  to win  or  die...
2007-04-17 13:26
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
你写一个出来看看,看跟我的方法一样不

“运行正确”的程序不见得是高质量的程序
2007-04-17 13:28
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
要上课了,回来写吧,关键是几位的整数???

Fight  to win  or  die...
2007-04-17 13:33
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 

你自己设定就行了,

反正不overflow就行了

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


“运行正确”的程序不见得是高质量的程序
2007-04-17 13:45
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 

用STL的 map做快些 按照关键字(各位数加起来后的和)进行排序

程序代码:

#include<map>
#include<iostream>

using namespace std;

class Compare {//用来对关键字进行排序
public:

bool operator()( int key1, int key2 ) const {
return key1<=key2?1:0;
}
};

int sum(int n)//计算各位之和
{
int sum=0;
while(n)
{
sum+=n%10;
n/=10;
}
return sum;
}

int main()
{
int a[6]={123,45,67,2222,96,9};//给定的数组
copy(a,a+6,ostream_iterator<int>(cout,\" \")); //输出最初的数组
map<int,int,Compare> s;
for(int i=0;i<6;++i) s[sum(a[i])]=a[i]; //按照关键字排序赋值
cout<<\"\nAfter Sorted:\n\";
for( map<int,int,Compare>::iterator iter = s.begin(); iter != s.end(); iter++ ) cout <<(*iter).second<<\" \";//输出\"排序\"后的数组
cout<<endl;

return 0;
}

[此贴子已经被作者于2007-4-17 15:16:43编辑过]


unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-17 15:15
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

上课回来了,这是我的方法。两个函数:
[CODE]int convert(int ival){
return ival % 10 + ival / 10;
}
void sort(int A[],int size){
for (int i = 1;i < size;++i){
if (convert(A[i]) < convert(A[i-1])){
int temp = A[i],j = i;
do{
A[j] = A[j-1];
--j;
}
while (j > 0 && convert(temp) < convert(A[j-1]));
A[j] = temp;
}
}
}

///////////////////////////////////////////////
///////////////////下面是测试//////////////////
int main(){
const int size = 8;
int list[size] = {12,99,81,46,33,10,66,77};
sort(list,size);
for (int i = 0;i < size;++i)
cout << list[i] << " ";
cout << endl;
return 0;
}[/CODE]


Fight  to win  or  die...
2007-04-17 16:25
快速回复:[求助]一个不会做的题目
数据加载中...
 
   



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

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