| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:[求助]一个不会做的题目
只看楼主 加入收藏
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 

呵呵 思想都是按照关键字(各位求和)再排序 你的很好

只是我在传递数组时排的序,时间上稍微快点 但我完全用了标准库的东东,没什么算法可言


unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-17 18:39
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
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
我的那个用游大哥那种计算数位和的办法就可以计算任意位了,我也学习了啊!

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

奖励奖励

“运行正确”的程序不见得是高质量的程序
2007-04-17 20:00
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
以下是引用aipb2007在2007-4-17 16:25:45的发言:

上课回来了,这是我的方法。两个函数:
[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]


这位大哥的比较简洁,呵呵.给俺指明方向了啊.


学习需要安静。。海盗要重新来过。。
2007-04-20 11:25
suntaoathome
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-4-20
收藏
得分:0 
#include<iostream.h>
int fun(int num)
{
int result=0;
while(num/10>0||num%10>0)
{
result=result+num%10;
num=num/10;
}
return result;
}
void main()
{
int a[100];
int n=1;
int num;
while(1)
{
cout<<"请输入第"<<n<<"个数据"<<endl;
cout<<"输入 0000 结束输入操作!"<<endl;
cin>>num;
if(num==0000)
break;
a[n-1]=num;
n++;
}
int i,j;
for(i=0;i<n-1;i++)
for(j=i;j<n-2;j++)
if(fun(a[j])>fun(a[j+1]))
{
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(int h=0;h<n-1;h++)
cout<<a[h]<<endl;
}
2007-04-21 13:17
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
得分:0 
楼上的方法真不错

当你开始怀疑自己时,说明你已经失去了判断力
2007-04-21 13:28
wood1314
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-4-21
收藏
得分:0 
只是两位数的话那很好办 sum=n/10+n%10,
要是n位树的话就用个选择分枝结构吧 比如if(10=<n<100)..f(1) else if(100<=n<1000) ...f(2) else if.... else
我想最多不应该超过 65535吧 ! sum=n/(数的数量级)+(n-(n/(数的数量级)x该数量级)+n-(....递归啦(结束条件(数量级到2))) .....最后一个用上级递归过来的结果%10 ) 每算一个数 ,加完和之后 ,连同此数的地址(在数组中的)存在一个与原来等长的新数组中.
然后用快速排对新数组排序, 遍历此数组中的存的地址号,对应打印出原来数组中元素就好.


呵呵 说起来简单 做起来麻烦,(新的数组每个存贮单元都要多出点位置来存原数组的地址号哦.可用结构体 或者把数组申请比原来大1倍也可.记得检查申请空间成功了没有啊)
2007-04-21 14:26
快速回复:[求助]一个不会做的题目
数据加载中...
 
   



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

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