1.3n+1问题
#include <stdio.h>
int main()
{
int n,t,i;
int count;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
count=0;
scanf("%d",&n);
while(n!=1)
{
if(n%2!=0)
{
n=3*n+1;
count++;
}
else
{
n/=2;
count++;
}
}
printf("%d ",count);
}
return 0;
}
需要注意的是,记得在while前加上count=0,否则输出的count将为t个数的变换次数之和。
2.验证“哥德巴赫猜想”
#include <stdio.h>
#include <math.h>
int main()
{
int i,n,p,q;
int flag1,flag2;
scanf("%d",&n);
for(p=2;p<=n/2;p++)
{
q=n-p;
for(i=2;i<=sqrt(p)+1;i++)
{
flag1=1;
flag2=1;
if(p%i==0 && p!=2)
{
flag1 = 0;
break;
}
}
for(i=2;i<=sqrt(q)+1;i++)
{
if(q%i==0 && q!=2)
{
flag2 = 0;
break;
}
}
if(flag1==1 && flag2==1)
{
printf("%d = %d + %d",n,p,q);
break;
}
}
return 0;
}
运用技巧,令flag1和flag2=0,后若二者都=1,则两者皆为素数,则可输出。
上述两段代码都要注意,给一个数赋值应考虑其应放在循环内还是循环外。
3.计算所有N位水仙花数
#include <stdio.h>
#include <math.h>
int main()
{
int n,l,t,i,m,p;
scanf("%d",&n);
for(i=pow(10,n-1);i<pow(10,n);i++)
{
t=i;
p=i;
m=1;
l=0;
while(t>10)
{
t/=10;
m*=10;
}
while(m!=0)
{
l+=pow(p/m,n);
p%=m;
m/=10;
}
if(l==i)
printf("%d\n",l);
}
return 0;
}
先用循环算出输入数的位数,后进行水仙花数编程。还是要考虑赋值是否需要放在循环内。