常见编程算法实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见编程算法实例
关于数字上的一些编程算法
1. 输出9*9口诀乘法表
分析:分行与列考虑,共9行9列,i控制行,j控制列。
#include "stdio.h"
main()
{ int i,j,result;
printf("\n");
for (i=1;i<10;i++)
{ for(j=1;j<=i;j++)
{ result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
} printf("\n");/*每一行后换行*/
}}
2. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
【分析】关键是计算出每一项的值。
main()
{ int a,n,count=1;
long int sn=0,tn=0;
printf("please input a and n\n");
scanf("%d,%d",&a,&n);
printf("a=%d,n=%d\n",a,n);
while(count<=n)
{ tn=tn+a;
sn=sn+tn;
a=a*10;
++count;
}printf("a+aa+...=%ld\n",sn); }
公式∏/4=1-1/3+1/5-1/7+...+ 1/n ,求∏的近似值,直到最后一项1/n 的绝对值小于0.000001。
#include
#include
main()
{ int f=1;
double pi=0,t=1,v=1;
while(fabs(t)>1e-6)
{ pi=pi+t;
v+=2;
f=-f;
t=f/v;
}
pi*=4;
printf("∏=%f\n",pi); }
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
规律:分子是前一项分子分母之和,分母是前一项的分子。
main()
{ int n,t,number=20;
float a=2,b=1,s=0;
for(n=1;n<=number;n++)
{s=s+a/b;
t=a;a=a+b;b=t;/*序列规律的实现*/
}
printf("sum is %9.6f\n",s); }
判断11<=x<=10000中的数那些是回文数,统计回文数个数,回文数每行输出10个。分析:(1) 让x重新构成新的数t,如果x==t则是回文数.(2) 分解出x的各位,进行首尾比较,如果都相等则是回文数。
fun1()//算法一
{ long x,i,t=0,s=10,cnt=0;
for(x=11;x<10000;x++)
{ i=x;
while(i!=0)//构成新的数
{ t=t*s+i%10;
i=i/10; }
if(t==x)
{printf("%5d",x);
cnt++;
if(cnt%10==0)
printf("\n"); }
t=0; }
printf("\ncnt=%5d",cnt);
}
fun2()//算法二
{ long x,i,t=0,j=0,s=10,x1,cnt=0;
int a[10];
for(x=11;x<10000;x++)
{ x1=x;
while(x1!=0)//分解出各位
{ a[ j ]=x1%10;
x1=x1/10;
j++; }
i=0;j--;
while(i if(a[i]==a[j]) i++,j--; else break; if(i>=j) {printf("%5d",x); cnt++; if(cnt%10==0) printf("\n"); } j=0; } printf("\ncnt=%5d",cnt); } main() {fun1(); } 求1+2!+3!+...+20!的和。 main() {float n,s=0,t=1; for(n=1;n<=20;n++) { t*=n; //实现阶乘 s+=t; //将阶乘累加 } printf("1+2!+3!...+20!=%e\n",s); //%e 为科学计数法输出 } 输入一个年份判断它是否是闰年,满足下面条件之一就称为闰年:(1).能被4整除而不能被100整除。(2).能被100整除也能被400整除。 #include main() {long int year; printf("input year:"); scanf("%d",&year); if(year%4==0&& year%100!=0||year%100==0&&year%400==0) printf("yes"); else printf("No"); } 将十进制数转换成任意进制。分析:将输入的数循环除以基数取余直到商为0 ,然后逆序输出。#include void main() // idec为十进制数,ibase为要转换成数的基 {int idec,i, idr, p=0,ibase; char strdr[20],t; printf("输入要转换的十进制数idec="); scanf("%d",&idec); printf("\n输入要转换成的进制基数(如:八进制则输入8)ibase="); scanf("%d",&ibase); while(idec!=0) //循环除以基数取余直到商为0 { idr=idec % ibase; if(idr>=10) strdr[p++]=idr-10+65; //将16进制的10,11,12,13,14,15与A,B,C,D,E,F对应 else strdr[p++]=idr+48; //将数字转换为数字字符 idec/=ibase; //得到商,把这个商的值重新赋值给idec } //下面for循环的目的是将取余的各数逆序存放, for(i=0; i { t=strdr[i]; strdr[i]=strdr[p-i-1]; strdr[p-i-1]=t; } strdr[p]='\0'; printf("\n转换成%d进制后的数为:%s",ibase,strdr); printf("\n"); } 将一个数组逆序输出。分析:用第一个与最后一个交换,然后用第二个与倒数第二个交换,其余依此类推。 #define N 5 main() {int a[N]={9,6,5,4,1},i,temp; printf("\n original array:\n"); for(i=0;i printf("%4d",a[i]); for(i=0;i {temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf("\n sorted array:\n"); for(i=0;i printf("%4d",a[i]); }