当前位置: 代码迷 >> C语言 >> [求助]这是一个关于回数的程序,是我们的作业 ,可是却做不出来
  详细解决方案

[求助]这是一个关于回数的程序,是我们的作业 ,可是却做不出来

热度:402   发布时间:2007-11-07 22:52:37.0
mark
----------------解决方案--------------------------------------------------------
我写的程序只要不到6秒钟(而且时间主要耗费在输出上面)就能搞定,看来你至少可以打64分了
----------------解决方案--------------------------------------------------------
把输出导入到一个文件:

c:/>prime > out.txt
3
5
7
..
989484989
989525989
989555989
989565989
989595989
989646989
989868989
989898989
989919989
989969989
990050099
990070099
990161099
990313099
990323099
990353099
990383099
990565099
990707099
990727099
990919099
991060199
991363199
991414199
991474199
991555199
991626199
991737199
991858199
991888199
991909199
991999199
992090299
992181299
992222299
992232299
992252299
992313299
992343299
992363299
992555299
992727299
992777299
992898299
993161399
993343399
993353399
993373399
993515399
993646399
993656399
993737399
993808399
993838399
993878399
993959399
994020499
994080499
994090499
994131499
994242499
994333499
994474499
994494499
994656499
994707499
994777499
994848499
994878499
994929499
994939499
994969499
995070599
995090599
995111599
995181599
995303599
995343599
995414599
995555599
995696599
995757599
995777599
996020699
996101699
996121699
996181699
996242699
996464699
996494699
996565699
996626699
996656699
996686699
996808699
996818699
996878699
996929699
996949699
996989699
997030799
997111799
997393799
997464799
997474799
997555799
997737799
997818799
997909799
997969799
998111899
998121899
998171899
998202899
998282899
998333899
998565899
998666899
998757899
998898899
998939899
998979899
999070999
999212999
999272999
999434999
999454999
999565999
999676999
999686999
999727999
0 seconds

[此贴子已经被作者于2007-11-8 9:09:15编辑过]


----------------解决方案--------------------------------------------------------
楼上的。。。。少了2位吧。。。

我写了一个,排除偶数,先算回文,算下来5分钟

[此贴子已经被作者于2007-11-8 8:19:09编辑过]


----------------解决方案--------------------------------------------------------
以下是引用永夜的极光在2007-11-8 8:17:00的发言:
楼上的。。。。少了2位吧。。。

我写了一个,排除偶数,先算回文,算下来5分钟

5分钟?
那不300seconds了?

[此贴子已经被作者于2007-11-8 9:10:51编辑过]


----------------解决方案--------------------------------------------------------
是呀,我等了半天。。

0秒也太夸张了点吧
----------------解决方案--------------------------------------------------------
也不是很夸张
其实要判断的数很少,不到100000个.
----------------解决方案--------------------------------------------------------
300seconds
where T = 70 - RunTime(seconds)
那岂不是要得负分了....
----------------解决方案--------------------------------------------------------

花了四个小时,编出来了


#include<stdio.h>
#include<math.h>

#define MAX 1000000000
#define MIN 3

long int nexthuiwen(long int currenthuiwen)
//输入:一个回文数
//输出:比当前回文数大的最小回文数
{
long int i=currenthuiwen,m;
int weishu=0; //数字的位数
long int j=0;
// printf("当前回文数是:%ld\n",i);

while(i>0) //求出数值的位数
{
i=i/10;
weishu+=1;
}

if(weishu==1) //求出规整前的新数
{
currenthuiwen+=1;
}
else
{
currenthuiwen+=(long int)pow10(weishu/2);
currenthuiwen=currenthuiwen-currenthuiwen%(long int)pow10(weishu/2);
}
// printf("新数为:%ld\n",currenthuiwen);

i=currenthuiwen; //求出规整前数值的位数
weishu=0;
while(i>0)
{
i=i/10;
weishu+=1;
}

for(j=1;j<=weishu/2;j++) //规整新数
{
m=currenthuiwen/(long int)pow10(weishu-j)%10*(long int)pow10(j-1);
// printf("%ld\n",m);
currenthuiwen+=m;
}
// printf("新的回文数是: %ld\n",currenthuiwen);
return currenthuiwen;
}


int sushu(long int data)
//输入:任意长整数
//输出:若该整数为素数,则输出1,否则输出0
{
long int end=(long int)sqrt(data);
long int i;
for(i=2;i<=end;i++)
{
if(data%i==0)return 0;
}
return 1;
}


int main(void)
{
long int data=MIN;
while(data<=MAX)
{
if(sushu(data)) printf("%ld\n",data);
data=nexthuiwen(data);
}
return 0;
}


在turboc++3.1中运行通过
时间我没算,在我的 电脑上跑了分把钟。

[此贴子已经被作者于2007-11-8 15:06:22编辑过]


----------------解决方案--------------------------------------------------------

/* 下面是生成一个9位的奇数回文数的程序,使用数字的,没有使用 数组 */

#include <stdio.h>
int main(void)
{
int d1,
d2,
d3,
d4,
d5,
palindrome = 0;
int n = 0;

for(d1 = 1; d1 <= 9; d1+=2)
for(d2 = 0; d2 <= 9; d2++)
for(d3 = 0; d3 <= 9; d3++)
for(d4 = 0; d4 <= 9; d4++)
for(d5 = 0; d5 <= 9; d5++)
{
++n;
palindrome = 100000000 * d1 +
10000000 * d2 +
1000000 * d3 +
100000 * d4 +
10000 * d5 +
1000 * d4 +
100 * d3 +
10 * d2 +
1 * d1;

printf("%d\n", palindrome);
//getchar();

}

printf("%d\n", n);
getchar();
return 0;
}

[此贴子已经被作者于2007-11-10 0:01:36编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案