此文寫于2013年5月20日。
全部為當(dāng)初在學(xué)校自己寫的,尤為對(duì)于在校學(xué)生,認(rèn)真看是能看懂的。
題目1:古希臘人認(rèn)為因子的和等于它本身的數(shù)是一個(gè)完全數(shù)(自身因子除外),例如28的因子是1、2、4、7、14,且1+2+4+7+14=28,則28是一個(gè)完全數(shù),編寫一個(gè)程序求2-1000內(nèi)的所有完全數(shù)。
#include "stdio.h"
#include "math.h"
main()
{
int mymath,i,inputmath,a,b;
for(i=2;i<=1000;i++)
{
inputmath=1;
b=sqrt(i);
for(mymath=2;mymath<=b;mymath++)
{
if(i%mymath==0)
{
a=i/mymath;
inputmath=inputmath+a+mymath;
}
}
if(inputmath==i)
{
printf("%d\t",inputmath);
}
}
}
題目2:一輛以固定速度行駛的汽車,司機(jī)在上午10點(diǎn)看到里程表上的讀數(shù)是一個(gè)對(duì)稱數(shù)(即這個(gè)數(shù)從左向右讀和從右向左讀是完全一樣的),為95859。兩小時(shí)后里程表上出現(xiàn)了一個(gè)新的對(duì)稱數(shù)。問該車的速度是多少?新的對(duì)稱數(shù)是多少?
#include "stdio.h"
#include "math.h"
main(
{
long i,a[6],b,c;
for(i=95860;i<1000000;i++)
{
if(i<100000)
{
a[0]=i/10000;
a[1]=i/1000%10;
a[2]=i/100%10;
a[3]=i%100/10;
a[4]=i%10;
b=a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
if(b==i)
{
c=(i-95859)/2;
printf("新的對(duì)稱數(shù)是:%d\n",i);
printf("速度:%d\n",c);
break;
}
}
}
}
題目3:自守?cái)?shù)是指一個(gè)數(shù)的平方的尾數(shù)等于該數(shù)自身的自然數(shù)。例如:
25^2=625 76^2=5776 9376^2=87909376
請(qǐng)求出200000以內(nèi)的自守?cái)?shù)
參考結(jié)果:
0 1 5 6 25 76 376 625 9376 90625 109376
#include "stdio.h"
#include "math.h"
main()
{
long i,a;
for(i=0;i<=200000;i++)
{
if(i<10)
{
a=i*i%10;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<100)
{
a=i*i%100;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<1000)
{
a=i*i%1000;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<10000)
{
a=i*i%10000;
if(i==a)
{
printf("%ld\t",i);
}
}
else if(i<100000)
{
a=i*i%100000;
if(i==a)
{
printf("%ld\t",i);
}
}
else
{
a=i*i%1000000;
if(i==a)
{
printf("%ld\t",i);
}
}
}
}
題目4:一個(gè)自然數(shù)的七進(jìn)制表達(dá)式是一個(gè)三位數(shù),而這個(gè)自然數(shù)的九進(jìn)制表示也是一個(gè)三位數(shù),且這兩個(gè)三位數(shù)的數(shù)碼順序正好相反,求這個(gè)三位數(shù)。
#include "stdio.h"
main()
{
int i,a,b,x[3],c,y[3],d,e;
for(i=81;i<500;i++)
{
e=i;
for(a=0;a<3;a++)
{
x[a]=e%7;
e=e/7;
}
b=x[2]*100+x[1]*10+x[0];
for(d=0;d<3;d++)
{
y[d]=b%9;
b=b/9;
}
c=y[0]*100+y[1]*10+y[2];
if(x[2]==y[0]&&x[1]==y[1]&&x[0]==y[2])
{
printf("%d\t%d\t%d\n",x[2],x[1],x[0]);
printf("%d\t%d\t%d\n",y[2],y[1],y[0]);
printf("%d\n",c);
break;
}
}
}
題目5:帶分?jǐn)?shù)
100 可以表示為帶分?jǐn)?shù)的形式:100 = 3 + 69258 / 714
還可以表示為:100 = 82 + 3546 / 197
注意特征:帶分?jǐn)?shù)中,數(shù)字1~9分別出現(xiàn)且只出現(xiàn)一次(不包含0)。
類似這樣的帶分?jǐn)?shù),100 有 11 種表示法。
題目要求:
從標(biāo)準(zhǔn)輸入讀入一個(gè)正整數(shù)N (N<1000*1000)
程序輸出該數(shù)字用數(shù)碼1~9不重復(fù)不遺漏地組成帶分?jǐn)?shù)表示的全部種數(shù)。
注意:不要求輸出每個(gè)表示,只統(tǒng)計(jì)有多少表示法!
例如:
用戶輸入:
100
程序輸出
11
再例如:
用戶輸入:
105
程序輸出:
6
#include "stdio.h"
int charnum(int i,int j,int k)
{
int a,x[10],f;
for(f=0;f<10;f++)
{
x[f]=0;
}
while(i)
{
a=i%10;
x[a]++;
if(x[a]>1)
{
return 0;
}
i=i/10;
}
while(j)
{
a=j%10;
x[a]++;
if(x[a]>1)
{
return 0;
}
j=j/10;
}
while(k)
{
a=k%10;
x[a]++;
if(x[a]>1)
{
return 0;
}
k=k/10;
}
if(x[0]>0)
{
return 0;
}
for(f=1;f<10;f++)
{
if(x[f]==0)
{
return 0;
}
}
return 1;
}
void main()
{
int n,i,j,k,count;
printf("請(qǐng)輸入n:");
scanf("%d",&n);
count=0;
for(i=1;i<=n-1;i++)
{
for(k=1;k<=9999;k++)
{
if(i!=k)
{
j=(n-i)*k;
if(charnum(i,j,k)==1)
{
count++;
printf("\n%d=%d+%d/%d",n,i,j,k);
}
}
}
}
printf("\n%d的帶分?jǐn)?shù)的表示法有%d種\n",n,count);
}