西工大C语言学习知识程序课后复习.docx
《西工大C语言学习知识程序课后复习.docx》由会员分享,可在线阅读,更多相关《西工大C语言学习知识程序课后复习.docx(19页珍藏版)》请在冰豆网上搜索。
西工大C语言学习知识程序课后复习
T021、羊羊聚会
#include
#include
doublef(doublea,doubleb)
{
doublei;
for(i=1;;i++)
{
if(i*b==a)
{
returni;
break;
}
if(i*b>a)
{
return(i-1);
break;
}
}
}
intmain()
{
doublex,y,a,b,c,t,m,n,k;
scanf("%lf%lf%lf%lf%lf",&x,&y,&a,&b,&c);
if(b>a)
m=b-a,n=y-x;
else
m=a-b,n=x-y;
if(n>0)
for(t=0;;t++)
{
k=t*m-(c-n);
if(k==0)
{
printf("%.0lf",t);
break;
}
if(k>0&&(k-f(k,c)*c)==0)
{
printf("Impossible");
break;
}
}
if(m<0)
for(t=0;;t++)
{
k=t*n-m;
if(k==0)
{
printf("%.0lf",t);
break;
}
if(k>0&&(k-f(k,c)*c)==n)
{
printf("Impossible");
break;
}
}
return0;
}
T022、粒子裂变
(1)#include
#include
intmain()
{intt,i,a=1,b=0;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
b=3*a+2*b;
a=(b+(pow(-1,i))*3)/3;
}
printf("%d%d",a,b);
}
(2)#include
intmain()
{
intn[100],m[100],t,i;
n[0]=1;//n[100]数组存储α粒子的数目,初始值为0
m[0]=0;//m[100]数组存储β粒子的数目,初始值为1
scanf("%d",&t);
for(i=1;i<=t;i++){
n[i]=m[i-1];
m[i]=3*n[i-1]+2*m[i-1];
}
printf("%d%d",n[t],m[t]);
getchar();
getchar();//多读取一个回车可以看到输出结果,直到输出回车后结果才闪过
}
T023、探索合数世纪
#include
#include
intmain()
{
intn,s,i=0,j=0,w,h,k,u=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
for(k=u;;k++){
for(s=k*100,h=1;s<=k*100+99;s++){
for(j=2,w=1;j<=sqrt(s);j++)
{
w=s%j;
if(w==0)
break;
}
if(w!
=0)
{h=0;
break;}
}
if(h==1)
{u=k;
break;}
}
}
printf("%d%d\n",u*100,u*100+99);
return0;
}
T024、排列1~9
#include
#include
intmain()
{
inti,j,k;
inta[10],d,fg,n=0,t,m=0;
for(i=123;i<=987/3;i++)
{
j=2*i;k=3*i;
a[0]=i/100;a[1]=i/10%10;a[2]=i%10;
a[3]=j/100;a[4]=j/10%10;a[5]=j%10;
a[6]=k/100;a[7]=k/10%10;a[8]=k%10;
for(d=0;d<8;d++)
for(fg=d+1;fg<9;fg++)
if(a[d]==a[fg])
n++;
if(n==0)
{
for(t=0;t<9;t++)
if(a[t]==0)
m=1;
if(m!
=1)
printf("%d%d%d\n",i,j,k);
else
m=0;
}
else
n=0;
}
printf("%f\n",(double)clock()/CLOCKS_PER_SEC);
return0;
}
T025、幸运数字7
#include
intmain()
{
inti,N;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
if(i%7==0)printf("%d\n",i);
else
{
inttemp=i;
while(temp>0)
{
if(temp%10==7)
{
printf("%d\n",i);
break;
}
temp=temp/10;
}
}
}
}
T026、1的传奇
#include
intSubSum(int);
intPow(inta,intx);
intTotalSum(intn);
intNumLen(intn);
intmain()
{
intn;
scanf("%d",&n);
printf("%d\n",TotalSum(n));
return0;
}
intNumLen(intn)
{
ints=0;
do{
s+=1;
n/=10;
}while(n);
returns;
}
intSubSum(intn)
{
intm=NumLen(n);
intfirstnum=n/Pow(10,m-1);
if(firstnum==1)
return((m-1)*Pow(10,m-2)+1);
elseif(firstnum==2)
return(SubSum(Pow(10,m-1))+Pow(10,m-1)+(m-1)*Pow(10,m-2)-1);
else
return(SubSum((firstnum-1)*Pow(10,m-1))+(m-1)*Pow(10,m-2));
}
intPow(inta,intx)
{
inta2=a,i;
if(x==0)return1;
for(i=1;ia*=a2;
returna;
}
intTotalSum(intn)
{
inttotalsum=0;
intlen=NumLen(n);
intfirstnum=n/Pow(10,len-1);
if(len==1&&n)
return1;
if(len==1&&!
n)
return0;
if(firstnum==1)
totalsum+=(SubSum(Pow(10,len-1))+n%Pow(10,len-1));
else
totalsum+=SubSum(firstnum*Pow(10,len-1));
n%=Pow(10,len-1);
return(totalsum+TotalSum(n));
}T027、分数拆分
#include
intmain()
{
intk,x,y;
scanf("%d",&k);
for(x=(k+1);x<=2*k;x++)
{
y=(k*x)/(x-k);
if((k*x)%(x-k)==0)
{
y=(k*x)/(x-k);
printf("1/%d=1/%d+1/%d\n",k,y,x);
}
}
}
T028、解不等式
#include
intmain()
{
intk,x,y;
scanf("%d",&k);
for(x=(k+1);x<=2*k;x++)
{
y=(k*x)/(x-k);
if((k*x)%(x-k)==0)
{
y=(k*x)/(x-k);
printf("1/%d=1/%d+1/%d\n",k,y,x);
}
}
}
T029、除法0~9,a~j
#include
intmain()
{
intp,n,m,i,j,a[10],jud;
scanf("%d",&p);//读入要测试的数
n=1234;
for(;n<=98765;n++)//n穷举到最大的98765
{
jud=0;
m=n;//不能破坏循环变量n的值
for(i=4;i>=0;i--)
{
a[i]=m%10;
m=m/10;//将n的5位数字分别存在数组中
}
if(n%p!
=0)
continue;//如果n不能被p整除,则跳到下个循环
else
{
m=n/p;//分母需要重新赋值,不能与分子相同
for(i=9;i>=5;i--)
{
a[i]=m%10;
m=m/10;//若能整除,则把5个数字分别存在数组中
}
}
for(i=0;i<=8;i++)
{
for(j=i+1;j<=9;j++)
if(a[i]==a[j])
{
jud=1;
break;//判断a[0]~a[9]中有无重复数字
}
if(jud==1)
break;//若有重复数字,则跳出循环
}
if(jud==0)//若没有重复数字,则输出这组数据
{
for(i=0;i<=4;i++)
printf("%d",a[i]);
printf("/");
for(i=5;i<=9;i++)
printf("%d",a[i]);
printf("=%d\n",p);
}
}
return0;
}
T030、分数化小数
#include
intmain()
{
intp,n,m,i,j,a[10],jud;
scanf("%d",&p);//读入要测试的数
n=1234;
for(;n<=98765;n++)//n穷举到最大的98765
{
jud=0;
m=n;//不能破坏循环变量n的值
for(i=4;i>=0;i--)
{
a[i]=m%10;
m=m/10;//将n的5位数字分别存在数组中
}
if(n%p!
=0)
continue;//如果n不能被p整除,则跳到下个循环
else
{
m=n/p;//分母需要重新赋值,不能与分子相同
for(i=9;i>=5;i--)
{
a[i]=m%10;
m=m/10;//若能整除,则把5个数字分别存在数组中
}
}
for(i=0;i<=8;i++)
{
for(j=i+1;j<=9;j++)
if(a[i]==a[j])
{
jud=1;
break;//判断a[0]~a[9]中有无重复数字
}
if(jud==1)
break;//若有重复数字,则跳出循环
}
if(jud==0)//若没有重复数字,则输出这组数据
{
for(i=0;i<=4;i++)
printf("%d",a[i]);
printf("/");
for(i=5;i<=9;i++)
printf("%d",a[i]);
printf("=%d\n",p);
}
}
return0;
}