输出前N个Fibonacci数 和 输出2到n之间的全部素数

输出前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"); 
    

运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200104145315876.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0tFVklOenpo,size_16,color_FFFFFF,t_70
上面为正常
下面出现了多余的换行 是因为在i=30的时候 count仍为10 继续换行

区间长度更大 则会出现夸张的换行
在这里插入图片描述

发布了42 篇原创文章 · 获赞 13 · 访问量 1919

猜你喜欢

转载自blog.csdn.net/KEVINzzh/article/details/103832272