输出前N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。
如果N小于1,则输出"Invalid."
#include <stdio.h>
void fib(int x);
int main()
{int n;
scanf("%d",&n);
if(n<1)
printf("Invalid.");
for(int i=1;i<=n;i++)
{
fib(i);
if(i%5==0)
printf("\n");
}
if(n%5!=0)
printf("\n");
return 0;
}
void fib(int x){
if(x==1||x==2)
printf("%11d",1);
else{
int a[1000]={1,1};
for(int i=2;i<=x;i++){
a[i]=a[i-1]+a[i-2];
}
printf("%11d",a[x-1]);
}
}
注意 面对空格的问题 由于fib(i)为第i 个斐波那契数 所以 当i 能被5整除的时候 可以换行
而下面的作为对比 注意换行判断 应在素数判断的 if 条件句内
#include <stdio.h>
int prime(int x);
int main()
{long int n;
scanf("%ld",&n);
int count=0;
for(int i=2;i<=n;i++)
{
if(prime(i)){
printf("%6d",i);
count++;
if(count%10==0)
printf("\n");
}
}
if(count%10!=0)
printf("\n");
return 0;
}
int prime(int x){
int result =0;
if(x==2||x==3)
return 1;
else{
for(int i=2;i<=x/2;i++){
if(x%i==0){
result=1;
break;
}
}
if(result==0)
return 1;
else return 0;
}
}
此处
if(prime(i)){
printf("%6d",i);
count++;
if(count%10==0)
printf("\n");
}
count%10 在 i 为素数时才换行 保证下一个素数在下一行
如果在判断素数的条件句以外 会多换行
if(prime(i)){
printf("%6d",i);
count++;}
if(count%10==0)
printf("\n");
运行结果:
上面为正常
下面出现了多余的换行 是因为在i=30的时候 count仍为10 继续换行
区间长度更大 则会出现夸张的换行