前言
提示:以下是本篇文章正文内容,下面案例可供参考
一.递归
1.李白打酒 (递归)
话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
代码如下(示例):
#include<iostream>
#include<cmath>
using namespace std;
int i;
void n(int hua, int dian, int jiu)
{
if (hua == 0 && dian == 0 && jiu == 1)
++i;
if (hua > 0)
{
n(hua - 1, dian, jiu - 1);
}
if (dian > 0)
{
n(hua, dian - 1, jiu * 2);
}
}
int main()
{
n(9, 5, 2);
cout << i;
return 0;
}
2.猴子吃桃
有一只猴子吃一堆果子,已知每天吃昨天剩下的果子的一半再多一个,直到第10天才吃完。问原来这堆果子有多少个?
请你使用递归的方法编程。程序命名为Lab3_2.cpp。
#include <iostream>
using namespace std;
int fab(int n);
int fab();
int main()
{
cout<<"fab(int n): "<<fab(10)<<endl;
cout<<"fab(): "<<fab()<<endl;
return 0;
}
int fab(int n)
{
if(n==1)
return 2;
else
return 2*(fab(n-1)+1);
}
int fab()
{
int m=2,x;
for(int i=1;i<10;i++)
{
x=2*(m+1);
m=x;
}
return x;
}
#include<iostream>
using namespace std;
int chitao(int day)
{
int num;
if(day==10)
{
num=2;
}
else
{
num=(chitao(day+1)+1)*2;
}
return num;
}
int main()
{
int num=chitao(1);
cout<<"原来这堆果子有"<<num<<"个"<<endl;
}
二.素数
1.哥德巴赫猜想
通过网络了解哥德巴赫猜想,然后编写程序。要求是输入任意一个100万之内的偶数N,找出是两个素数A和B,令A+B=N。程序命名为Lab4_4.cpp //哥德巴赫猜想是说任何一个大于2的偶数都能表示成为两个素数之和。
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(long x) {
for (long i = 2; i <= sqrt(x) + 1; i++)
{
if (x%i == 0)
return 0;
return 1;
}
}
int main()
{
long n;
cout << "请输入一个偶数(4<n<10^6):";
cin >> n;
if (n % 2 == 1 || n <3 )exit(0);
for (long i = 2; i <= 0.5*n; i++)
{
if (isPrime(i) && isPrime(n - i))
cout << i << "+" << n - i << "=" << n << endl;
}
return 0;
}
三.
1.至今活了几天
编写一个程序,输入你的出生年月日,以及当前年月日,计算你出生到现在有多少天了。程序命名为Lab3_5.cpp my
#include<iostream>
using namespace std;
int leap(int y)
{
if(y%400==0||y%4==0&&y%100!=0)
{
return 1;
}
return 0;
}
int dday(int y,int m,int d)
{
int day=0;
int month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
if(leap(y))
{
month[2]=28;
}
for(int i=0;i<m;i++)
{
day+=month[i];
}
day+=d;
return day;
}
int main()
{
int year,month,day,leapCount=0;
int n_year,n_month,n_day;
cout<<"请输入你的出生年月日";
cin>>year>>month>>day;
cout<<"请输入当前年月日";
cin>>n_year>>n_month>>n_day;
for(int i=year;i<n_year;i++)
{
leapCount+=leap(i);
}
int day1=dday(year,month,day);
int day2=dday(n_year,n_month,n_day);
int sum=leapCount+(n_year-year)*365+day2-day1;
cout<<"出生到现在的天数:"<<sum<<endl;
return 0;
}
邹er
#include <iostream>
#include <ctime>
using namespace std;
int totalDays(int y ,int m,int d){
int t=0;
int prey=y-1;
int days[]={0,31,59,90,120,151,181,212,243,273,304,334,365};
t=prey*365+prey/4-prey/100+prey/400+days[m-1]+d;
if((y%4==0 &&y%100!=0)||y%400==0)
if(m>2 || (m==2 && d==29 ))
t++;
return t;
}
int main(void)
{
int day,mon,year;
int nowYear,nowMon,nowDay;
int court=0;
int t1,t2;
cout<<"请输入您的出生年月日,用空格隔开\n";
cin>>year>>mon>>day;
time_t tc=time(NULL);
tm *t =localtime(&tc);
nowYear=t->tm_year+1900;
nowMon=t->tm_mon+1;
nowDay=t->tm_mday;
t1=totalDays(year,mon,day);
t2=totalDays(nowYear,nowMon,nowDay);
cout<<"这是您来到地球的 "<<t2-t1<<"天"<<endl;
return 0;
}
2.最大数
最大数。输入K个正整数,将它们拼接在一起,找出其中最大的那个拼接数。例如输入:3 31 3 331,输出:333131是所有拼接方案中最大的。程序命名为Lab3_6.cpp。
#include<iostream>
#include<math.h>
using namespace std;
bool Compare(int num1,int num2)
{
int count1 = 0,count2 = 0;
int n1 = num1,n2 = num2;
while(n1)
{
count1++;
n1/=10;
}
while(n2)
{
count2++;
n2/=10;
}
int a = num1*pow(10.0,count2)+num2;
int b = num2*pow(10.0,count1)+num1;
return a>b?true:false;
}
int main()
{
int k;
cout<<"请输入有多少个数";
cin>>k;
int arr[k]={0};
for(int i = 0;i<k;i++)
{
cin>>arr[i];
}
int temp;
for(int i = 0;i<=k-1;++i)
{
for(int j = 0;j<k-i-1;j++)
{
if(Compare(arr[j],arr[j+1]))
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
cout<<"最大的数为:";
for(int i = k-1;i>=0;--i)
{
cout<<arr[i];
}
cout<<endl;
delete []arr;
}
|