對于遵循一定規律的重復計算操作,again and again,人類疲倦不堪,可計算機卻“樂此不疲”,從某種意義上來說,回圈的基本語法結構(初始化、回圈條件、重復陳述句、為下一次重復做的準備和變化)并不難掌握,難的是如何分析,并把這種特定的規律傳達給計算機,下面根據問題的分類,給出相應的代碼以供參考,
- 特征數字——窮舉
example1.1: 求a, b(a<b)的最大公約數
#include <stdio.h>
int main()
{
int a,b,i,com_divisor;
scanf("%d%d",&a,&b);
for(i=1;i<=b;++i)
{
if(a%i==0&&b%i==0)
com_divisor=i;
}
printf("%d,%d的最大公約數為%d\n",a,b,com_divisor);
return 0;
}
}
example1.2: 判斷是否為“完數”
#include <stdio.h>
int main()
{
int n,divisor,s;
scanf("%d",&n);
for(divisor=1,s=0;divisor<n;divisor++)
{
if(n%divisor==0)
{
s=s+divisor;
}
}
if(s==n) printf("yes\n");
else printf("no\n");
return 0;
}
example1.3: 判斷是否為素數
#include<stdio.h>
#include<math.h>
main()
{
long long i,num;
_Bool flag=1;
printf("請輸入大于1的整數:");
scanf("%lld",&num);
for(i=2;i<=sqrt(num);++i){
if(num%i==0)
{
flag=0;
//break;
}
}
if(flag) printf("%lld是素數\n",num);
else printf("%lld不是素數\n",num);
}
example1.4: 輸出10個"韓信點兵數"
#include <stdio.h>
int main()
{
int n,t;
for(n=0,t=0;t<10;++n)
{
if(n%3==2&&n%5==3&&n%7==4)
{
if(t<9)
printf("%d ",n);
else if(t=9)
printf("%d\n",n);
t+=1;
}
}
return 0;
}
example1.5: 輸出1~999中能被3整除且至少有一位數字是5的所有整數
#include <stdio.h>
int main()
{
int n,d1,d10,d100,t;
for(n=1,t=0;n<=999;n++)
{
d100=n/100;
d10=n/10%10;
d1=n%10;
if(n%3==0&&(d1==5||d10==5||d100==5))
{
printf("%-4d",n);
t++;
if(t%5==0)
printf("\n");
}
}
printf("\n");
return 0;
}
example1.6: 判斷回文數(正整數的逆轉)
#include <stdio.h>
int main()
{
int n,s,m;
scanf("%d",&n);
m=n;
s=0;
while(n)
{
s=s*10+n%10;
n=n/10;
}
if(s==m) printf("yes\n");
else printf("no\n");
return 0;
}
- 規律運算——迭代
example2.1: 斐波拉契數列(其一)
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 1 | a | ||||||
| 1 | b | a’ | |||||
| 2 | b’ | a’’ | |||||
| 3 | b’’ | a’’’ | |||||
| 5 | b’’’ | a’’’’ | |||||
| 8 | b’’’’ | a’’’’’ | |||||
| 13 | b’’’’’ | a’’’’’’ | |||||
| 21 | b’’’’’’ |
#include <stdio.h>
int main()
{
int a=1,b=1,n,i,t;
scanf("%d",&n);
for(i=1;i<n;++i)
{
t=a;
a=b;
b+=t;
}
printf("斐波拉契數列的第%d項為%d\n",n,a);
return 0;
}
example2.2: (不斷)分解因式
# include <stdio.h>
int main()
{
int x,n;
scanf("%d",&n);
printf("%d=",n);
x=2;
while(n>1)
{
if(n%x==0)
{
if(n==x) printf("%d\n",x);
else printf("%d*",x);
n=n/x;
}
else
x++;
}
return 0;
}
example2.3: 正整數的逆轉(其二)
#include <stdio.h>
int main()
{
int n,x;
scanf("%d",&n);
x=n;
while(n)
{
printf("%d",n%10);
n=n/10;
}
return 0;
}
example2.4: 累加與階乘
#include <stdio.h>
int main()
{
int n,i=1,sum=0,product=1;
scanf("%d",&n);
while(i<=n)
{
sum=sum+i;
product=product*i;
i=i+1;
}
printf("1+...+%d=%d\n",n,sum);
printf("1*...*%d=%d\n",n,product);
return 0;
}
example2.5: 楊輝三角(其一)
#include <stdio.h>
#include <math.h>
int factorial (int n);
int main()
{
int n,i,j,x;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
x=factorial(i-1)/(factorial(j-1)*factorial(i-j));
if(i==j) printf("%d",x);
else printf("%d ",x);
}
printf("\n");
}
return 0;
}
int factorial(int n)
{
int i,product;
for(i=1,product=1;i<=n;i++)
{
product=product*i;
}
return product;
}
- 符號圖案——格式
example3.1: 九九乘法表(標準、右下)
#include <stdio.h>
#include <math.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%-4d",i,j,i*j);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int i,j,k;
for (i=1;i<=9;i++)
{
for (k=1;k<=9-i;k++)
{
printf(" ");
}
for (j=1;j<=i;j++)
{
printf("%d*%d=%-2d ",i,j,i*j);
}
putchar('\n');
}
return 0;
}
example3.2: 楊輝三角(其二)
#include<stdio.h>
int main()
{
int i,j,n,k,a,b,c,t;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=1;j<=2*(n-i-1);j++) printf(" ");
for(j=0;j<i;j++)
{
a=1;
for(k=1;k<=i;k++) a=a*k;
b=1;
for(k=1;k<=j;k++) b=b*k;
c=1;
for(k=1;k<=i-j;k++) c=c*k;
t=a/b/c;
printf("%3d ",t);
}
printf("%3d\n",1);
}
printf("\n");
}
return 0;
}
example3.3: 輸出第m-1個素數到第n+1個素數之間的所有素數,每10個換一次行
#include<stdio.h>
#include<math.h>
_Bool check(long num);
main()
{
long count=0,prime[10000],left,right,i,j,k,time;
for(i=2;i<=10000;i++)
{
if(check(i))
{
count+=1;
prime[count]=i;
}
}
while(scanf("%ld%ld",&left,&right)!=EOF)
{
getchar();
for(k=left,time=1;k<=right;k++,time++)
{
if(time%10==0||time==right-left+1)
printf("%ld\n",prime[k]);
else
printf("%ld ",prime[k]);
}
}
}
_Bool check(long num)
{
long i;
_Bool flag=1;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0)
{
flag=0;
break;
}
}
return flag;
}
example3.4: 圣誕樹
int christmas(int n,int a[10],int b[10],int c[10],int x,int y)
{
int i,j,k,m;
m=y;
for(i=0;i<n;i++)
{
if(a[i]+b[i]*(c[i]-1)>m)
m=a[i]+b[i]*(c[i]-1);
}
for(i=0;i<n;i++)//繪制n個矩陣
{
for(j=1;j<=c[i];j++)//繪制單個矩陣
{
for(k=1;k<=m/2-a[i]/2-(j-1)*b[i]/2;k++)//輸出空格
{
printf(" ");
}
for(k=1;k<=a[i]+b[i]*(j-1);k++)//輸出*
{
printf("*");
}
printf("\n") ;
}
}
for(i=1;i<=x;i++)//輸出下方矩形
{
for(j=1;j<=m/2-y/2;j++)//輸出空格
{
printf(" ");
}
for(j=1;j<=y;j++)//輸出*
{
printf("*");
}
printf("\n");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/216981.html
標籤:其他
上一篇:大三的我竟然入職了百度
下一篇:19美亞杯小結
