一酒奶、遞推算法
1、順推算法
兔子的繁殖過程
#include <stdio.h>
#define NUM 13
int main()
{
????int i;
????//初始月份和第一個月的兔子總數(shù)為1
????long fib[NUM]={1,1};
????for(i=2;i<NUM;i++)
????{
? ???????//本月的兔子=上兩個月兔子之和
????????fib[i]=fib[i-1]+fib[i-2];
????}
????for(i=0;i<NUM;i++)
????{
????????printf("%d月兔子總數(shù):%d\n",i,fib[i]);
????}
????return 0;
}
2奶赔、順推實例
最后一個月連本帶息取出1000
#include <stdio.h>
#define FETCH 1000//最后取出1000
#define RATE 0.0171//利率 /100
int main()
{
????//便于計算
????double corpus[49];
????int i;
????corpus[48]=(double)FETCH;
????for(i=47;i>0;i--)
????{
????????corpus[i]=(corpus[i+1]+FETCH)/(1+RATE/12);
????}
????for(i=48;i>0;i--)
????{
????????printf("第%d月末本利合計:%.2f\n",i,corpus[i]);
????}
????return 0;
}
二、枚舉(窮舉)算法
1杠氢、算法描述題
? ? ? ? ? ? ? ?算
----------------
題題題題題
#include <stdio.h>
int main()
{
????int i1,i2,i3,i4,i5;
????long multi,result;
????//算
????for(i1=1;i1<=9;i1++)
????{
????????//法
????????for(i2=0;i2<=9;i2++)
????????{
????????????//描
????????????for(i3=0;i3<=9;i3++)
????????????{
????????????????//述
????????????????for(i4=0;i4<=9;i4++)
????????????????{
????????????????????//題
????????????????????for(i5=0;i5<=9;i5++)
????????????????????{
????????????????????????multi=i1*10000+i2*1000+i3*100+i4*10+i5;
????????????????????????result=i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5;
????????????????????????if(multi*i1==result)
????????????????????????{
????????????????????????????printf("\n%5d%2d%2d%2d%2d\n",i1,i2,i3,i4,i5);
????????????????????????????printf("X%12d\n",i1);
????????????????????????????printf("_____________________\n");
????????????????????????????printf("%3d%2d%2d%2d%2d%2d\n",i5,i5,i5,i5,i5,i5);
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
????}
return 0;
}
2站刑、實例:填運算符
5 5 5 5 5=5
#include <stdio.h>
int main()
{
????int j,i[5];//循環(huán)變量,數(shù)組i表示4個運算符
????int sign;
????int result;
????int count=0;
????int num[6];
????float left,right;
????char oper[5]={' ','+','-','*','/'};//運算符鼻百,第0個元素不用
????printf("請輸入5個數(shù):");
????for(j=1;j<=5;j++)
????????scanf("%d",&num[j]);
????printf("請輸入結(jié)果:");
????scanf("%d",&result);
????for(i[1]=1;i[1]<=4;i[1]++)//1:+,2:-,3:*,4:/
????{
????????//排除除號后跟0的情況
????????if(i[1]<4||num[2]!=0)
????????{
? ? ? ? for(i[2]=1;i[2]<=4;i[2]++)
????????{
????????if(i[2]<4||num[3]!=0)
????????{
? ? ? ? for(i[3]=1;i[3]<=4;i[3]++)
????????{
????????if(i[3]<4||num[4]!=0)
????????{
????????????for(i[4]=1;i[4]<=4;i[4]++)
????????????{
????????????????if(i[4]<4||num[5]!=0)
????????????????{
????????????????????//左邊為0
????????????????????left=0;
????????????????????//右邊為第一個數(shù)
????????????????????right=num[1];
????????????????????//加法
????????????????????sign=1;
????????????????????for(j=1;j<=4;j++)
? ? ? ? ? ? ? ? ? ? {
????????????????????????//第j個運算符
? ? ? ? ? ? ? ? ? ? ? ?switch(oper[i[j]])
? ? ? ? ? ? ? ? ? ? ? ?{
????????????????????????????case '+':
????????????????????????????????left=left+sign*right;
????????????????????????????????sign=1;
????????????????????????????????right=num[j+1];
????????????????????????????????break;
????????????????????????????case '-':
????????????????????????????????left=left+sign*right;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sign=-1;
????????????????????????????????right=num[j+1];
????????????????????????????????break;
? ? ? ? ? ? ? ? ? ? ? ? ? ? case '*':
????????????????????????????????right=right*num[j+1];
????????????????????????????????break;
????????????????????????????case '/':
????????????????????????????????right=right/num[j+1];
????????????????????????????????break;
????????????????????????}
????????????????????}
????????????????????if(left+sign*right==result)
????????????????????{
????????????????????????count++;
????????????????????????printf("%3d:",count);
????????????????????????for(j=1;j<=4;j++)
????????????????????????printf("%d%c",num[j],oper[i[j]]);
????????????????????????printf("%d=%d\n",num[5],result);
????????????????????}
? ? ? ? ? ? ? ? ? }
????????????????}
? ? ? ? ?}
? ? ? ? }
????????}
? ? ????}
????????}
????}
if(count==0)
printf("沒有符合要求的方法绞旅!\n");
return 0;
}