1. 计算书费
【问题描述】下面是一个图书的单价表:
计算概论 28.9 元/本
数据结构与算法 32.7 元/本
数字逻辑 45.6元/本
C++程序设计教程 78 元/本
人工智能 35 元/本
计算机体系结构 86.2 元/本
编译原理 27.8元/本
操作系统 43 元/本
计算机网络 56 元/本
JAVA程序设计 65 元/本
给定每种图书购买的数量,编程计算应付的总费用。
输入:输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。
输出:输出一行,包含一个浮点数f,表示应付的总费用。精确到小数点后一位。
【样例输入】
1 5 8 10 5 1 1 2 3 4
【样例输出】
2140.2
#include<iostream> #include<iomanip> using namespace std; int main() { float a[11]={28.9,32.7,45.6,78,35,86.2,27.8,43,56,65},sum=0; int i,num; for(i=0;i<10;i++){ cin >> num; sum +=num*a[i]; } cout << fixed << setprecision(1) << sum << endl; return 0; }
2. 输出序列前N项的数据和
【题目描述】
有一组序列的数是:1、2、9、33、126、477,……,请同学们认真观察数值的规律。现要求:指定项数为任意的N项,计算:
1)第N项的数据;
2)输出前N项数据的和。
输入中只有一行,包含1个整数N(其中3<=N<=15)为这个序列的项数。
输出共有二行:
第一行为这个序列第N项的数据;
第二行为这个序列前N项的数据和。
【要求】每一行的输出数据都从第一列开始。
【样例输入1】
6
【样例输出1】
477
648
【样例输入2】
10
【样例输出2】
98577
133893
#include<iostream> using namespace std; int a[1001]; int main() { int i,n,k,sum; cin >> n; if(n==1) { cout<<1<<endl<<1; } if(n==2) { cout<<2<<endl<<3; } if(n>=3) { a[1]=1; a[2]=2; sum=3; for(i=3; i<=n; i++) { a[i]=(a[i-1]+a[i-2])*3; sum +=a[i]; } } cout<<a[n]<<endl<<sum; return 0; }
1. 歌手投票
【问题描述】
学校推出10名歌手,校学生会想知道这10名歌手受欢迎的程度,设计一个投票箱,让每一个同学给自己喜欢的歌手投票,为了方便,学生会把10名歌手用1-10进行编号,这样,同学们只要用编号进行投票,现在,学生会找到你,帮助统计一下每个歌手获得的票数。
输入:两行第一行是一个整数n,表示参加投票的人数,第二行是n个整数,每个数的取值范围为[1-10],表示喜欢的歌手。
输出:两行,第一行为1-10十个数字,表示选手编号,第二行十个数字,表示各个编号选手获得的票数。
【样例输入】
13
2 8 1 2 6 4 5 9 3 10 5 3 2
【样例输出】
1 2 3 4 5 6 7 8 9 10
1 3 2 1 2 1 0 1 1 1
#include<iostream> #include<iomanip> #include<math.h> using namespace std; /* 学校推出10名歌手,校学生会想知道这10名歌手受欢迎的程度, 设计一个投票箱,让每一个同学给自己喜欢的歌手投票, 为了方便,学生会把10名歌手用1-10进行编号,这样, 同学们只要用编号进行投票,现在,学生会找到你, 帮助统计一下每个歌手获得的票数。 输入:两行第一行是一个整数n,表示参加投票的人数, 第二行是n个整数,每个数的取值范围为[1-10],表示喜欢的歌手。 输出:两行,第一行为1-10十个数字,表示选手编号, 第二行十个数字,表示各个编号选手获得的票数。 */ int main(){ int n; cin>>n; int a; int arr[101]={0,0,0,0,0,0,0,0,0,0}; for(int i=0;i<n;i++){ cin>>a; switch(a){ case 1: arr[0]++; break; case 2: arr[1]++; break; case 3: arr[2]++; break; case 4: arr[3]++; break; case 5: arr[4]++; break; case 6: arr[5]++; break; case 7: arr[6]++; break; case 8: arr[7]++; break; case 9: arr[8]++; break; case 10: arr[9]++; break; default: cout<<"没有你要投的选手"<<endl; } } for(int i=0;i<10;i++){ cout<<i+1<<" "; if(i==9){ cout<<endl; } } for(int i=0;i<10;i++){ cout<<arr[i]<<" "; } return 0; }
2. 校门外的树
【问题描述】
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入:第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。
输出:包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
【样例输入】
500 3 150 300 100 200 470 471
【样例输出】
298
#include<iostream> using namespace std; int a[10001]; int main() { int i,j,l,m,q,z,count=0; cin >> l >> m; for(i=0; i<=l; i++){ a[i]=1; } for(i=0; i<m; i++) { cin >> q >> z; for(j=q; j<=z; j++) { if(a[j]==1) { a[j]=1-a[j]; } } } for(i=0; i<=l; i++) { if(a[i]) count++; } cout << count<<endl; return 0; }
3. 石头剪刀布
【问题描述】
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?
输入:输入包含三行。
第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。
第二行包含NA个整数,表示小A出拳的规律。
第三行包含NB个整数,表示小B出拳的规律。
其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。
输出:输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。
【样例输入】
10 3 4
0 2 5
0 5 0 2
【样例输出】
A
【提示】对于测试数据,猜拳过程为:
A:0 2 5 0 2 5 0 2 5 0
B:0 5 0 2 0 5 0 2 0 5
A赢了4轮,B赢了2轮,双方打平4轮,所以A赢的轮数多。
#include<iostream> using namespace std; int main() { /*int i,N,NA,NB,a[100],b[100],awin = 0,bwin = 0; cin >> N >> NA >> NB; for(i=0;i<NA;i++) cin >> a[i]; for(i=0;i<NB;i++) cin >> b[i]; for(i=0;i<N;i++){ if((a[i%NA]==0&&b[i%NB]==2)|| (a[i%NA]==5&&b[i%NB]==0)|| (a[i%NA]==2&&b[i%NB]==5)){ awin++; } if((b[i%NB]==0&&a[i%NA]==2)|| (b[i%NB]==5&&a[i%NA]==0)|| (b[i%NB]==2&&a[i%NA]==5)){ bwin++; } } if(awin>bwin){ cout << "A"<<endl; }else if(awin<bwin){ cout << "B"; }else{ cout << "draw"; }*/ int j,la,lb,af=0,bf=0,h; cin>>j>>la>>lb; int a[la]; int b[lb]; for(int i=0;i<la;i++){ cin>>a[i]; } for(int i=0;i<lb;i++){ cin>>b[i]; } for(int k=0;k<j;k++){ //a赢得次数 if((a[k%la]==5&&b[k%lb]==0)||(a[k%la]==2&&b[k%lb]==5)||(a[k%la]==0&&b[k%lb]==2)){ af=af+1; } //b赢得次数 if((b[k%lb]==5&&a[k%la]==0)||(b[k%lb]==2&&a[k%la]==5)||(b[k%lb]==0&&a[k%la]==2)){ bf=bf+1; } } if(af>bf){ cout<<"A"; }else if(bf>af){ cout<<"B"; }else{ cout<<"draw"; } return 0; }