1 1 1.读取0-1000之间的整数,求整数各位数的和
#include
#include
using namespace std;
void main()
{
int n;
int res=0;
cout<<"请输入1-1000的整数";
cin>>n;
while(n)
{
res+=n%10;
n/=10;
}
cout<<res;
}
2 2 2.金融应用:复利值
假设你每月向银行账户存100美元,年利率为5%,那么每月利率是0.05/12=0.00417第一个月之后:账户上的值变成了100*(1+0.00417)=100.417第二个月之后:账户上的值变成了(100+100.417)*(1+0.00417)=201.252第三个月之后:账户上的值变成了(100+201.252)*(1+0.00417)=302.507以此类推,编写显示n个月后的账户上的钱数
#include
using namespace std;
void main()
{
int n;
cout<<"请输入n:";
cin>>n;
double p=0;
while(n)
{
p=(100.0+p)*(1.0+0.05/12);
n--;
}
cout<<p;
}
3 3 3.随机月份
编写一个随机产生1和12之间的整数的程序,并且根据数字显示相应的月份单词
#include
#include
#include
using namespace std;
void main()
{
srand((unsigned)time(0));
char *month[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
cout<<month[rand()%12]<<endl;
}
4 4 4.商业:检验ISBN-10 ISBN-10(国际标准书号)
检验ISBN-10 ISBN-10(国际标准书号)由十个个位整数d1 d2 d3 d4 d5 d6 d7 d8 d9 d10组成,最后一位d10是校验和,它是使用下面公式用另外9位数字计算出来的
(d11+d22+d33+d44+d55+d66+d77+d88+d9*9)%11,如果最后一位是10,那么按照ISBN-10的习惯,最后一位应该表示为X
提示用户输入前9个数,然后显示10位ISBN
#include
#include
using namespace std;
void main()
{
cout<<"请输入ISBN-10前九位数:";
string isbn;
do
{
cin>>isbn;
}
while(isbn.length()!=9);
int p=0;
for(int i=0;i<9;i++)
{
p+=(isbn[i]-48)*(i+1);
}
isbn+=(p%11==10?'X':p%11+48);
cout<<isbn;
}
5 5 5.计算三角形周长
#include
using namespace std;
void main()
{
double a=0,b=0,c=0;
cout<<"请输入三角形的三边长度:";
do
{
if(a!=0)
{
cout<<"你输入的三角形不合法";
}
cin>>a>>b>>c;
}
while(a+b<=c||a+c<=b||b+c<=a);
cout<<"三角形周长:"<<a+b+c;
}
6 6 6.点是否在圆内
#include
#include
using namespace std;
void main()
{
double x,y,c_x,c_y,r;
cout<<"请输入一个点:";
cin>>x>>y;
cout<<"请输入一个圆心和半径";
cin>>c_x>>c_y>>r;
if(sqrt(pow(c_x-x,2)+pow(c_y-y,2))>r)
{
cout<<"点("<<x<<","<<y<<")不在圆内";
}
else
{
cout<<"点("<<x<<","<<y<<")在圆内";
}
}
7 7 7.游戏(抽牌)
模拟从一副52张的牌中抽一张牌,并显示牌的大小和花色
#include
#include
using namespace std;
void main()
{
srand((unsigned)time(0));
char *n[]={"1","2","3","4","5","6","7","8","9","10","J","Q","k"};
char *color[]={"梅花","方块","红心","黑桃"};
int p=rand()%52;
cout<<"抽到 ["<<color[p/13]<<n[p/4]<<"]"<<endl;
}
8 8 8.几何:两个圆
判断第二个圆是否在第一个圆内,还是和第一个圆重叠
#include
#include
using namespace std;
void main()
{
double f_x,f_y,f_r,s_x,s_y,s_r;
cout<<"请输入第一个圆的圆心和半径";
cin>>f_x>>f_y>>f_r;
cout<<"请输入第二个圆的圆心和半径";
cin>>s_x>>s_y>>s_r;
if(fabs(f_r-s_r)>=sqrt(pow(f_x-s_x,2)+pow(f_y-s_y,2)))//比较两圆的半径差和两圆心之间距离
{
if(f_r>s_r)
{
cout<<"第二个圆在第一个圆内";
}
else
{
cout<<"第一个圆在第二个圆内";
}
}
else if(f_r+s_r>=sqrt(pow(f_x-s_x,2)+pow(f_y-s_y,2)))
{
cout<<"两个圆重叠";
}
else
{
cout<<"两个圆不重叠";
}
}
9 9 9.计算三角形的角度
数学公式:
A=acos((a\*a-b\*b-c\*c)/(-2\*b\*c))
B=acos((b\*b-a\*a-c\*c)/(-2\*a\*c))
C=acos((c\*c-b\*b-a\*a)/(-2\*b\*a))
acos
反余弦公式求出来的值是弧度制的,所以还要除3.14再乘180
#include
#include
using namespace std;
void main()
{
double a_x,a_y,b_x,b_y,c_x,c_y;
double ab,bc,ca;
cout<<"请输入三角形的三点坐标:";
cin>>a_x>>a_y>>b_x>>b_y>>c_x>>c_y;
bc=sqrt(pow(b_x-c_x,2)+pow(b_y-c_y,2));
ca=sqrt(pow(c_x-a_x,2)+pow(c_y-a_y,2));
ab=sqrt(pow(a_x-b_x,2)+pow(a_y-b_y,2));
cout<<"三角形:A="<<acos((bc*bc-ca*ca-ab*ab)/(-2*ca*ab))/3.14*180;
cout<<"°\nB="<<acos((ca*ca-bc*bc-ab*ab)/(-2*bc*ab))/3.14*180<<
cout<<"°\nC="<<acos((ab*ab-ca*ca-bc*bc)/(-2*ca*bc))/3.14*180<<"°"<<endl;
}
10 10 10.最大圆距离 (球面上的两个点之间距离)
假设 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)和 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)是两点的地理经纬度两个点的经纬度可用以下公式算
d=半径*arccos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2))
地球半径为 6371.01 k m 6371.01km 6371.01km
#include
#include
using namespace std;
double toRadian(double a)//把角度转成弧度制
{
double pi=3.1415926;
return a/180*pi;
}
void main()
{
double f_x,f_y,s_x,s_y;
cout<<"请输入两点的经纬度:";
cin>>f_x>>f_y>>s_x>>s_y;
cout<<"两点距离为:"<<6371.01*acos(sin(toRadian(f_x))*sin(toRadian(s_x))+cos(toRadian(f_x))*cos(toRadian(s_x))*cos(toRadian(f_y-s_y)))<<"km";
}
11 11 11.计算将来的学费
假设今年某大学的学费为10000美元,学费的年增长率为5%,一年后,学费将是10500美元。计算10年后的学费,以及从现在开始的10年后算起,4年内的总学费
#include
using namespace std;
void main()
{
double now=10000;//储存当前学费
double sum=0;//计算10年后的4年内的总学费
int year=1;//几年后
while(year<=13)
{
now+=now*0.05;
if(year==10)
{
cout<<"十年后的学费:"<<now<<endl;
}
if(year>=10)
{
sum+=now;
}
year++;
}
cout<<"10年后算起,4年内的总学费是:"<<sum<<endl;
}
12 12 12.显示金字塔
提示用户输入一个在1到15之间的整数,然后显示一个金字塔的形状
示例:
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
#include
using namespace std;
void main()
{
int n;
cout<<"请输入1到15之间的整数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)//循环打印n行
{
for(int j=0;j<(n-i)*3;j++)
cout<<" ";//经过我的观察,每一行前有(n-i)*3个空格,其中n是总行数,i是当前行数
int t=i;
while(t!=0)
{
t<10?cout<<t<<" ":cout<<t<<" ";//输出当前行i到1递减的数字,并且,每输出一次数字后判断这个数字是否是两位数,如果是就输出这个数字后只输出一个空格,不是就输出两个空格
t--;
}
t=2;
while(t<=i)
{
t+1<10?cout<<t<<" ":cout<<t<<" ";//输出当前行2到i递增的数字,并且,每输出一次数字后判断下一个数字是否是两位数,如果是就输出这个数字后只输出一个空格,不是就输出两个空格
t++;
}
cout<<endl;
}
}
13 13 13.打印金字塔形的数字
#include
#include
using namespace std;
void main()
{
int n;
int kg;//数字之间最大空格数
cout<<"请输入1到9之间的整数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)//循环打印n行
{
for(int j=0;j<(n-i)*4;j++)
cout<<" ";
int t=1;
while(t<=pow(2,i-1))
{
if(t*2<=pow(2,i-1))
{
t*2<10?cout<<t<<" ":t*2<100?cout<<t<<" ":cout<<t<<" ";
}
else
{
t/2<10?cout<<t<<" ":t/2<100?cout<<t<<" ":cout<<t<<" ";
}
t*=2;
}
t=pow(2,i-2);
while(t>=1)
{
t/2<10?cout<<t<<" ":t/2<100?cout<<t<<" ":cout<<t<<" ";
t/=2;
}
cout<<endl;
}
}
14 14 14.计算 π π π
使用公式 π π π=4(1- 1 3 \frac{1}{3} 31+ 1 5 \frac{1}{5} 51- 1 7 \frac{1}{7} 71+ 1 9 \frac{1}{9} 91- 1 11 \frac{1}{11} 111+ ⋯ \cdots ⋯+ − 1 i + 1 2 i − 1 \frac{-1^{i+1}}{2i-1} 2i−1−1i+1)
#include
#include
using namespace std;
void main()
{
double p=0;
double t=1;
for(double i=1;i<=100000;i++)
{
p+=t/(2*i-1);
t*=-1;
if((int)i%10000==0)
{
cout<<"当i="<< fixed << setprecision(0)<<i<<"时,π="<< fixed << setprecision(8)<<4*p<<endl;
}
}
}
15 15 15.计算 e e e
使用公式 e e e=1+ 1 1 ! \frac{1}{1!} 1!1+ 1 2 ! \frac{1}{2!} 2!1+ 1 3 ! \frac{1}{3!} 3!1+ 1 4 ! \frac{1}{4!} 4!1+ ⋯ \cdots ⋯+ 1 i ! \frac{1}{i!} i!1
#include
#include
using namespace std;
void main()
{
double now=1;
double res=1;
for(double i=1;i<=100000;i++)
{
now*=1/i;
res+=now;
if((int)i%10000==0)
{
cout<<"当i="<< fixed << setprecision(0)<<i<<"时,e="<< fixed << setprecision(8)<<res<<endl;
}
}
}
16 16 16.显示闰年
显示从101到2100期间所有的闰年,每行显示10个,数字之间用空格隔开,同时显示这期间闰年的数目
#include
using namespace std;
bool judge(int y)//定义一个函数来判断这个年是否为闰年
{
if(y%4==0&&y%100!=0||y%400==0)
{
return true;
}
else
{
return false;
}
}
void main()
{
int num=0;//计数闰年的个数
for(int i=101;i<=2100;i++)
{
if(judge(i))
{
cout<<i<<" ";
num++;
if(num%10==0) cout<<endl;
}
}
cout<<"该期间闰年总数为:"<<num<<endl;
}
17 17 17.显示每月第一天是星期几
提示用户输入年份及该年第一天是星期几的数字,然后在控制台上显示该年每月第一天是星期几
#include
using namespace std;
void main()
{
int y,n;
int a[12]={3,0,3,2,3,2,3,3,2,3,2,3};
int b[12]={3,1,3,2,3,2,3,3,2,3,2,3};
char *w[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
cout<<"请输入年份及改年第一天是星期几的数字:";
cin>>y>>n;
if(y%4==0&&y%100!=0||y%400==0)
{
int p=n;
for(int i=1;i<=12;i++)
{
cout<<y<<"年"<<i<<"月1日:"<<w[(p-1)%7]<<endl;
p+=b[i-1];
}
}
else
{
int p=n;
for(int i=1;i<=12;i++)
{
cout<<y<<"年"<<i<<"月1日:"<<w[(p-1)%7]<<endl;
p+=a[i-1];
}
}
}
18 18 18.显示日历
提示用户输入年份及改年第一天是星期几的数字,然后在控制台上显示该年日历表
#include
using namespace std;
void main()
{
int y,n;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
cout<<"请输入年份及改年第一天是星期几的数字:";
cin>>y>>n;
for(int i=1;i<=12;i++)
{
cout<<"\n"<<i<<"月"<<endl;
cout<<"Sun\tMon\tTue\tWed\tThu\tFri\tSat"<<endl;
for(int j=-(n%7)+1;j<=(y%4==0&&y%100!=0||y%400==0?b[i-1]:a[i-1]);j++)//(y%4==0&&y%100!=0||y%400==0?b[i-1]:a[i-1])三目运算符,有时候可以代替if语句
{
if(j>0) cout<<j<<"\t";
else cout<<"\t";
if((j+n)%7==0&&j>0) cout<<endl;
}
n=((y%4==0&&y%100!=0||y%400==0?b[i-1]:a[i-1])%7+n)%7;
}
}
19 19 19.游戏:彩票
产生两位数彩票,产生第一个数后,使用循环不断产生第二个数,直与第一个数不同为止
#include
#include
using namespace std;
void main()
{
int a,b;
srand((unsigned)time(0));
a=rand()%9;
do{
b=rand()%9;
}
while(a==b);
cout<<"彩票:"<<a<<b<<endl;
}
20 20 20.完全数
如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数,10000以下有四个完全数,找出这四个完全数
#include
#include
using namespace std;
void main()
{
for(int i=2;i<10000;i++)
{
int res=1;
int j=2;
while(j<=sqrt(i))
{
if(i%j==0)
{
if(j!=i/j) res+=j+i/j;
else res+=j;
}
j++;
}
if(res==i) cout<<res<<endl;
}
}
21 21 21.剪刀石头布
可以连续玩这个游戏直到用户或计算机赢对手两次以上为止
#include
#include
using namespace std;
void main()
{
srand((unsigned)time(0));
int u=0;//玩家赢次数
int c=0;//电脑赢次数
while(u<3&&c<3)
{
int p,t;
char *s[]={"剪刀","石头","布"};
cout<<"请出手:";
cin>>p;//1代表剪刀 2代表石头 3代表布
t=rand()%3+1;
cout<<"你出了"<<s[p-1]<<"电脑出了"<<s[t-1];
if(p==((t+1)%3==0?3:(t+1)%3))
{
u++;
cout<<" 本局你赢"<<endl;
}
else if(p!=t)
{
c++;
cout<<" 本局电脑赢"<<endl;
}
else
{
cout<<" 平局"<<endl;
}
}
cout<<"电脑赢了"<<c<<"局"<<endl;
cout<<"玩家赢了"<<u<<"局"<<endl;
c>u?cout<<"电脑获胜":cout<<"玩家获胜";
}
22 22 22.十进制转换二进制
#include
#include
using namespace std;
void main()
{
vector<int> a;
int i;
cout<<"请输入十进制数:"<<endl;
cin>>i;
while(i)
{
a.push_back(i%2);
i/=2;
}
cout<<"二进制数为";
for(i=a.size()-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
23 23 23.十进制转八进制
#include
#include
using namespace std;
void main()
{
vector<int> a;
int i;
cout<<"请输入十进制数:"<<endl;
cin>>i;
while(i)
{
a.push_back(i%8);
i/=8;
}
cout<<"八进制数为";
for(i=a.size()-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
24 24 24.改写22和23题,让用户选择计算1~16进制
#include
#include
using namespace std;
void main()
{
vector<char> a;
char z[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int i,t;
cout<<"请输入十进制数:"<<endl;
cin>>i;
cout<<"请输入要转化的进制数:"<<endl;
cin>>t;
while(i)
{
a.push_back(z[i%t]);
i/=t;
}
cout<<t<<"进制数为";
for(i=a.size()-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
25 25 25.计算平均值和标准方差
#include
#include
using namespace std;
void main()
{
cout<<"请输入10个数字:"<<endl;
double a[10];
double p=0,t=0;
for(int i=0;i<10;i++)
{
cin>>a[i];
p+=a[i];
t+=pow(a[i],2);
}
cout<<"平均值:"<<p/10<<"标准方差:"<<sqrt((t-pow(p,2)/10)/9);
}
26 26 26.将毫秒数转换成 小时:分钟:秒
#include
using namespace std;
void main()
{
int p;
cout<<"请输入毫秒数"<<endl;
cin>>p;
p/=1000;
cout<<"\n"<<p/3600<<":"<<p%3600/60<<":"<<p%60<<endl;
}
27 27 27.回文素数
回文素数
,指的是一个数即是回文数也是素数
在控制台显示前一百个回文素数,每10个换一次行
#include
#include
#include
#include
using namespace std;
bool judge(int n)///判断回文素数
{
if(n%2==0&&n!=2) return false;//除了2本身,能整除2的一定不是素数
for(int i=3;i<=sqrt(n);i++)
if(n%i==0) return false;
stringstream ss;
string str;
ss<<n;
ss>>str;
for(int j=0;j<str.length()/2;j++)
if(str[j]!=str[str.length()-j-1]) return false;
return true;
}
void main()
{
int n=0;
for(int i=2;n<100;i++)
{
if(judge(i))
{
cout<<i<<" ";
n++;
if(n%10==0) cout<<endl;
}
}
}
28 28 28.反素数
反素数
,指的是一个非回文素数,反转了之后还是素数
在控制台显示前一百个反素数,每10个换一次行
#include
#include
using namespace std;
int reverse(int n)//反转数字
{
int res=0;
while(n)
{
res*=10;
res+=n%10;
n/=10;
}
return res;
}
bool judge(int n)///判断素数
{
if(n%2==0&&n!=2) return false;
for(int i=3;i<=sqrt(n);i++)
if(n%i==0) return false;
return true;
}
void main()
{
int n=0;
for(int i=2;n<100;i++)
{
int p=reverse(i);
if(judge(i)&&judge(p)&&i!=p)
{
cout<<i<<" ";
n++;
if(n%10==0) cout<<endl;
}
}
}
29 29 29.梅森素数
梅森素数
,指的是一个素数可以表示成 2 p − 1 2^{p}-1 2p−1的形式,其中p是正整数
找出 p ≤ 31 p\leq31 p≤31的所有梅森素数
#include
#include
using namespace std;
bool judge(int n)///判断素数
{
if(n%2==0&&n!=2)
{
return false;
}
for(int i=3;i<=sqrt(n);i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
void main()
{
int p=2;
cout<<"p\t\t2^p-1"<<endl;
while(p<=31)
{
int i=pow(2,p)-1;
if(judge(i))
{
cout<<p<<"\t\t"<<i<<endl;
}
p++;
}
}
30 30 30.双素数
双素数
,指的是一对差值为2的素数
双素数 指的是一对差值为2的素数,例如:5和7就是一对双素数,找出小于1000的所有双素数,显示结果格式为(n,m)
#include
#include
using namespace std;
int a[1000];
void judge(int* a)///埃氏筛选法
{
a[0]=1;
a[1]=a[0];
for(int i=2;i<1000;i++)
{
if(!a[i])
{
for(int j=i*i;j<1000;j+=i)
{
a[j]=1;
}
}
}
}
void main()
{
judge(a);
for(int i=2;i<998;i++)
{
if(!a[i]&&!a[i+2])
{
cout<<"("<<i<<","<<i+2<<")"<<endl;
}
}
}
31 31 31.双骰子赌博
掷两个骰子。每个骰子有六面,检查两个骰子的和。如果和为2、3或12(称为掷骰子),你就输了;如果和为7或11(称作自然),你就赢了;但如果和是其他数字,就确定了一个点。继续掷骰子,直到掷出一个7或掷出和刚才相同的点数。如果掷出的是7,你就输了。如果掷出的点数和你前一次掷出的点数相同,你就赢了。
#include
#include
using namespace std;
void main()
{
int last=0;
srand((unsigned)time(0));
int a,b;
while(1)
{
a=rand()%6+1;
b=rand()%6+1;
cout<<"你掷出了"<<a<<"和"<<b<<" ";
if(last==0)
{
if(a+b==2||a+b==3||a+b==12)
{
cout<<"你输了"<<endl;
break;
}
if(a+b==7||a+b==11)
{
cout<<"你赢了"<<endl;
break;
}
}
else
{
if(a+b==7)
{
cout<<"你输了"<<endl;
break;
}
else if(a+b==last)
{
cout<<"你赢了"<<endl;
break;
}
}
last=a+b;
cout<<"继续掷骰子"<<endl;
system("pause");
}
}
32 32 32.金融应用:信用卡号的合法性验证
一个信用卡号必须是13到16位的整数。它的开头必须是:
4
Visa卡
5
Master卡
37
American Express卡
6
Discover卡
1954年,IBM的Hans Luhn提出一种算法,用于验证信用卡卡号的有效性。这个算法在确定输入的卡号是否正确,或者这张信用卡是否被扫描仪正确扫描方面是非常有用的。
遵循这个合法性检测可以生成所有的信用卡号,通常称之为Luhn检测或者Mod 10检测,可以如下描述(为了方便解释,假设卡号4388576018402626:
- 从右到左对偶数位数字翻倍。如果对某个数字翻倍之后的结果是一个两位数,那么就将这两位加在一起得到一位数。
- 现在将第一步得到的所有一位数相加。
- 将卡号里从右到左奇数位上的所有数字相加。
- 将第二步和第三步得到的结果相加。
- 如果第四步得到的结果能被10整除,那么卡号是合法的;否则,卡号是不合法的。
例如,号码4388576018402626是不合法的,但是号码4388576018410707是合法的。
#include
#include
using namespace std;
void main()
{
string s;
cin>>s;
int res=0;
for(int i=0;i<s.length();i++)
{
if(i%2==0)
{
res+=(s[i]-48)*2>=10?(s[i]-48)*2/10+(s[i]-48)*2%10:(s[i]-48)*2;
}
else
{
res+=s[i]-48;
}
}
if(res%10==0&&(s[0]=='4'||s[0]=='5'||s[0]=='3'&&s[1]=='7'||s[0]=='6')&&s.length()<=16&&s.length()>=13)
{
cout<<"卡号合法"<<endl;
}
else
{
cout<<"卡号不合法"<<endl;
}
}