赞
踩
1 1 1.读取0-1000之间的整数,求整数各位数的和
#include<iostream> #include<math.h> 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<iostream> 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<iostream>
#include<cstdlib>
#include <ctime>
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<iostream> #include<string> 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<iostream> 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<iostream> #include<math.h> 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<iostream>
#include<ctime>
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<iostream> #include<math.h> 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<iostream> #include<math.h> 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<iostream>
#include<math.h>
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<iostream> 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<iostream> 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<iostream> #include<math.h> 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<iostream> #include <iomanip> 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<iostream> #include <iomanip> 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<iostream> 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<iostream> 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<iostream> 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<iostream>
#include<ctime>
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<iostream> #include<math.h> 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<iostream> #include<ctime> 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<iostream> #include<vector> 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<iostream> #include<vector> 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<iostream> #include<vector> 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<iostream> #include<math.h> 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<iostream>
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<iostream> #include<math.h> #include<string> #include<sstream> 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<iostream> #include<math.h> 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<iostream> #include<math.h> 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<iostream> #include<math.h> 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<iostream> #include<ctime> 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<iostream> #include<string> 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; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。