注:此前已发布过的题解不再发布(原题请在下面位置进行搜索)。
7-1-2 排序(算法任意)
本题要求将给定的n个整数从大到小排序后输出(可使用任意排序算法)。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
在这里给出一组输入。例如:
6
4 1 3 5 6 2
输出样例:
在这里给出相应的输出。例如:
6 5 4 3 2 1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[10],i;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(i=n-1;i>=0;i--){
cout<<a[i];
if(i)cout<<' ';
}
return 0;
}
7-1-4 从小到大排序
本题要求将给定的n个整数从小到大排序后输出。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从小到大有序的数列,相邻数字间有一个空格,行末也有1个空格。
输入样例:
4
5 1 7 6
输出样例:
1 5 6 7
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[10];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(i=0;i<n;i++)cout<<a[i]<<' ';
return 0;
}
7-2-6 矩阵转置
将一个3×3矩阵转置(即行和列互换)。
输入格式:
在一行中输入9个小于100的整数,其间各以一个空格间隔。
输出格式:
输出3行3列的二维数组,每个数据输出占4列。
输入样例:
1 2 3 4 5 6 7 8 9
输出样例:
1 4 7
2 5 8
3 6 9
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,a[10],k;
for(i=0;i<9;i++)
cin>>a[i];
for(i=0;i<3;i++){
k=i;
for(j=0;j<3;j++){
printf("%4d",a[k]);
k+=3;
}
cout<<endl;
}
return 0;
}
7-2-7 方阵右上三角元素和
求一个5×5数组右上三角(含对角线)元素的和。
输入格式:
输入5行5列的方阵,每行第一个数前没有空格,每行的每个数之间各有一个空格。
输出格式:
直接输出结果。没有其它任何附加字符。
输入样例:
1 2 4 5 8
1 4 7 4 1
1 2 3 6 9
5 6 9 8 4
7 5 3 6 8
输出样例:
74
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,x,s=0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
cin>>x;
if(j>=i)
s+=x;
}
}cout<<s;
return 0;
}
7-2-8 求二维数组除了四条边框之外的元素的和
求5×5数组除了四条边框之外的元素的和。
输入格式:
输入5行5列的方阵,每行第一个数前没有空格,每行的每个数之间各有一个空格。
输出格式:
直接输出结果。没有其它任何附加字符。。
输入样例:
1 1 1 1 1
1 2 3 4 1
1 4 5 1 2
8 4 1 1 1
2 1 1 1 1
输出样例:
25
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,x,s=0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
cin>>x;
if(i!=0&&i!=4&&j!=0&&j!=4)
s+=x;
}
}cout<<s;
return 0;
}
7-2-10 方阵转置
本题要求编写程序,将一个给定的 n×n 方阵转置(行列互换)后输出。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
输出转置后的n行n列矩阵,每个数占4位。
输入样例:
3
1 2 3
4 5 6
7 8 9
输出样例:
1 4 7
2 5 8
3 6 9
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,a[10][10];
cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
cin>>a[i][j];
}
for(j=1;j<=n;j++){
for(i=1;i<=n;i++){
printf("%4d",a[i][j]);
}
cout<<endl;
}
return 0;
}
7-2-11 求矩阵各行元素的所有正数的和
本题要求编写程序,求一个给定的m×n矩阵各行元素的所有正数的和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤10)。随后m行,每行给出n个整数,其间以空格分隔。
输出格式:
每行输出对应矩阵行元素的所有正数和。
输入样例:
例如:
3 4
-3 1 5 2
-1 -4 6 7
1 0 2 3
输出样例:
8
13
6
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n,i,j,a[15][15];
cin>>m>>n;
for(i=1;i<=m;i++){
int s=0;
for(j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]>0)
s+=a[i][j];
}
cout<<s<<endl;
}
return 0;
}
7-2-12 求矩阵各行元素的所有负数的和
本题要求编写程序,求一个给定的m×n矩阵各行元素的所有负数的和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤10)。随后m行,每行给出n个整数,其间以空格分隔。
输出格式:
每行输出对应矩阵行元素的所有负数和。
输入样例:
例如:
3 4
-3 1 5 2
-1 -4 6 7
1 0 -2 -3
输出样例:
-3
-5
-5
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n,i,j,a[15][15];
cin>>m>>n;
for(i=1;i<=m;i++){
int s=0;
for(j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]<0)
s+=a[i][j];
}
cout<<s<<endl;
}
return 0;
}
7-2-13 方阵对角线元素求和及计数
对输入的一个N*N
的方阵,求其两条对角线上的元素之和及非零元素的数量。
输入格式:
第一行输入一个不超过20的正整数N
,
在接下来的N
行中,依次输入方阵的每一行的N
个元素,方阵元素为绝对值不超过1000的整数,中间以空格间隔。
输出格式:
在一行中以sum = <s>, count = <c>.
的格式输出方阵两对角线上的元素之和以及非零元素的数量,其中<s>
和<c>
分别表示元素之和
、非零元素数量
,输出时以实际数量替换。
提示:(1)两条对角线的交叉元素不重复计算;(2)严格按规定格式输出,不得随意增删空格、换行等字符。
输入样例1:
4
1 2 3 4
1 2 3 4
0 1 2 3
0 1 2 3
输出样例1:
sum = 16, count = 7.
输入样例2:
5
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
输出样例:
sum = 15, count = 9.
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,a[20][20],s=0,k=0;
cin>>n;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cin>>a[i][j];
if(i==j||i+j==n-1)
{s+=a[i][j];
if(a[i][j])k++;
}
}
}
printf("sum = %d, count = %d.",s,k);
return 0;
}
7-2-14 方阵左下三角元素的和
输入一个4×4数组,求一个4×4数组左下三角(包括主对角线)元素的和。
输入格式:
输入4行4列的方阵,每行第一个数前没有空格,每行的每个数之间各有一个空格。
输出格式:
直接输出左下三角(包括主对角线)元素的和。没有其它任何附加字符
输入样例:
1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 7
输出样例:
46
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,x,s=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
cin>>x;
if(i>=j)
s+=x;
}
}cout<<s;
return 0;
}
7-2-15 方阵转置
输入一个n×n的方阵,把其转置并输出。
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,第一行输入一个整数n(n≤10),接下来的n行每行输入n个不超过2位的整数。
输出格式:
对于每组测试,输出这n×n矩阵的转置方阵,每行的每两个数据之间留一个空格。
输入样例:
5
5 51 96 80 45
51 57 77 45 47
72 45 58 83 21
0 28 42 72 42
91 61 7 73 66
输出样例:
5 51 72 0 91
51 57 45 28 61
96 77 58 42 7
80 45 83 72 73
45 47 21 42 66
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,a[11][11];
while(cin>>n){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
cin>>a[i][j];
}
for(j=1;j<=n;j++){
for(i=1;i<=n;i++){
if(i!=1)cout<<' ';
printf("%d",a[i][j]);
}
cout<<endl;
}}
return 0;
}
7-2-16 判断对称方阵
输入一个整数n及一个n阶方阵,判断该方阵是否以主对角线对称,输出Yes
或No
。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组数据的第一行输入一个整数n(1<n<100),接下来输入n阶方阵(共n行,每行n个整数)。
输出格式:
对于每组测试,若该方阵以主对角线对称,则输出Yes
,否则输出No
。
输入样例:
1
4
1 2 3 4
2 9 4 5
3 4 8 6
4 5 6 7
输出样例:
Yes
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,a[101][101],t;
cin>>t;
while(t--){
cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
cin>>a[i][j];
}
int k=0;
for(j=1;j<=n;j++){
for(i=1;i<=n;i++){
if(a[i][j]!=a[j][i])k=1;
}
}
if(k)cout<<"No\n";
else cout<<"Yes\n";
}
return 0;
}
7-2-17 求矩阵中的最大小值
输入一个n×m的整数矩阵(n<=10,m<=10),然后输出其中的最大值、最小值,并输出这两个值的下标。
输入格式:
输入矩阵的行数n和列数m(n<=10,m<=10),然后输入所有矩阵中的数据。
输出格式:
第一行输出n×m的数组中的最大值及其下标。每两项之间一个空格。 第二行输出n×m的数组中的最小值及其下标。每两项之间一个空格。 (如果有相同的最大的数,要求输出行列最小,行优先)
输入样例:
在这里给出一组输入。例如:
3 4
65 77 21 88
23 99 18 54
19 82 73 99
输出样例:
在这里给出相应的输出。例如:
max=99 row=1 col=1
min=18 row=1 col=2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,i,j,a[101][101];
cin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
cin>>a[i][j];
}
int max=a[1][1],x1=1,y1=1,min=a[1][1],x2=1,y2=1;
for(j=1;j<=m;j++){
for(i=1;i<=n;i++){
if(a[i][j]>max){max=a[i][j];x1=i;y1=j;}
if(a[i][j]<min){min=a[i][j];x2=i;y2=j;}
}
}
printf("max=%d row=%d col=%d\nmin=%d row=%d col=%d",max,x1-1,y1-1,min,x2-1,y2-1);
return 0;
}
7-2-18 矩阵加法
首先从键盘上两个矩阵的行数n和列数m,然后输入两个矩阵A和B的元素值,最后求出两个矩阵的和C并输出其元素值。
输入格式:
第1行包含两个整数n和m,表示矩阵的行数和列数。
接下来n行,每行m个整数,表示矩阵A的元素值。
再接下来n行,每行m个整数,表示矩阵B的元素值。
相邻两个整数之间用空格分隔。
输出格式:
n行m个数,表示矩阵C的元素值。每行的两个数之间用一个空格分隔。
输入样例:
3 3
11 12 13
21 22 23
31 32 33
10 20 30
11 21 31
12 22 32
输出样例:
21 32 43
32 43 54
43 54 65
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,i,j,a[101][101],b[101][101];
cin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
cin>>a[i][j];
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
cin>>b[i][j];
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
{
cout<<a[i][j]+b[i][j]<<' ';
}
cout<<endl;
}
return 0;
}
7-3-1 找画笔
豆豆对数字的执着,让他在理科领域游刃有余,但他近乎疯狂的投入也使父母有些担心,为了让孩子能够全面发展,决定拓宽他的学习领域。正好家旁边有个绘画培训中心,父母就给豆豆报了名。学习绘画的第一天就让豆豆产生了浓厚的兴趣,还主动要求买了很多很多的画笔。画笔有多种颜色,豆豆有一个习惯就是同种颜色的画笔就买两支,一支备用,这样就总共攒了 N 支画笔(N 是偶数且 1<N<100000)。
可是数字的敏感无孔不入,豆豆脑里蹦出了一个奇怪的问题:如果蒙上眼任意拿走一支画笔,分析剩下的 N-1 支画笔就能找出拿走了哪种颜色,你能回答他吗?
输入格式:
第一行一个整数N(N 是偶数且 1<N<100000),表示剩下的画笔个数就是题目描述中的 N-1。
第二行 N-1 个用空格隔开的正整数 Ai(0<Ai<100000),表示剩下的画笔的颜色编号。
注意:数据保证有一个画笔的颜色编号出现了一次,其余的都出现了两次。
输出格式:
一个整数,表示拿走的画笔的颜色编号。
输入样例:
10
1 1 9 11 5 3 11 5 9
输出样例:
3
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[100005],b[100005]={0};
cin>>n;
for(i=1;i<n;i++){
cin>>a[i];
b[a[i]]++;
}
for(i=1;i<n;i++){
if(b[a[i]]==1)cout<<a[i];
}
return 0;
}
7-3-2 期末分数排序
考试结束了,全班同学的分数都出来了。老师需要对分数做一次排序,看看从高到低,分数的排列是怎样的。
输入格式:
第一行是一个n,表示班级同学的人数,1<=n<=500000。
第二行开始有n个分数,0<=分数<=100,分数都是整数,没有零点五分。
输出格式:
输出排序后的分数,按照从大到小排列,相同的分数排在一起,每两个分数之间间隔一个空格。
输入样例:
10
0 60 73 60 82 90 100 18 55 84
输出样例:
100 90 84 82 73 60 60 55 18 0
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[500005],i;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(i=n-1;i>=0;i--){
cout<<a[i];
if(i>=1){
cout<<" ";
}
}
return 0;
}
7-3-4 分两列
一列纵队在上课的时候会造成很大的麻烦,体育老师常用的办法就是让同学们1、2报数,然后报2的同学向后退一步。现在我们已经知道一列纵队时候同学的学号分布,那么你能输出分成两列后同学的学号么?
输入格式:
第一行包括一个数n,表示班级里有n位学生,班级人数至少是1,不超过100。第二行包括n个数,表示一列纵队时每个同学的学号。
输出格式:
请按顺序输出分开两列后两列每位同学的学号,用空格隔开。每列同学占两行,报1的同学在第1行。
输入样例:
5
2 1 3 5 4
输出样例:
2 3 4
1 5
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[105],b[105],j=0,k=0,x;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
if(i%2==1)a[j++]=x;
else b[k++]=x;
}
for(i=0;i<j;i++){
if(i)cout<<' ';
cout<<a[i];
}
cout<<endl;
for(i=0;i<k;i++){
if(i)cout<<' ';
cout<<b[i];
}cout<<endl;//测试点1,必须 换行
return 0;
}
7-3-5 整理队伍
体育课上,教数学的体育老师怎么看这个队伍都不大对劲,于是对队伍进行了调整。张三,你和李四换一下位置......经过几次调整,队伍终于变得有条不紊了。
输入格式:
输入第一行包括一个整数n,表示班级里总共有n个人(1<=n<=100);第二行包括n个整数,表示同学们原来的顺序。第三行包括一个数m(m>=0),表示体育老师总共进行了m次调换;下面包括m行,每行包括两个数x,y,表示x位置的同学和y位置的同学调换位置。
输出格式:
输出调换之后的队伍,每两个同学的编号之间有一个空格。
输入样例:
5
1 2 3 4 5
3
1 2
1 5
3 4
输出样例:
5 1 4 3 2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,i,a[105];
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
cin>>m;
int x,y,t;
while(m--){
cin>>x>>y;
t=a[x];
a[x]=a[y];
a[y]=t;
}
for(i=1;i<=n;i++){
if(i!=1)cout<<" ";
cout<<a[i];
}
return 0;
}
7-3-7 结伴同行去秋游
可以去秋游啦!同学们别提多高兴了!老师说,单独行动有点危险,那么我们还是结伴同行吧。结伴的规则是这样的:排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴......依次类推,2个一组成同伴。好,请马上排出来吧!老师语音一落,同学们“唰唰唰”很快结伴好了,准备出发喽!
输入格式:
第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。
第二行n个整数表明n个同学的学号,学号之间有一个空格。
输出格式:
共n/2行,每行二个整数,表明结伴同学的学号,两个学号之间有一个空格。
输入样例:
6
5 6 4 12 3 2
输出样例:
5 2
6 3
4 12
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[105],i,n,x;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=1;i<=n/2;i++){
cout<<a[i]<<' '<<a[n-i+1]<<endl;
}
return 0;
}
7-3-8 摘苹果
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出很多苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知每个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式:
包括三行数据。
第一行是一个整数n,表示有n个苹果。苹果至少有一个,不超过1000个。
第二行包含n个100到200之间(包括100和200)的整数(以厘米为单位)分别表示这n个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第三行是一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式:
一个整数,表示陶陶能够摘到的苹果的数目。
输入样例:
10
100 200 150 140 129 134 167 198 200 111
110
输出样例:
5
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[1005],i,n,x,k=0;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
cin>>x;
for(i=1;i<=n;i++){
if(x+30>=a[i])k++;
}cout<<k;
return 0;
}
7-3-9 有重复的数据I
在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。
输入格式:
你的程序首先会读到一个正整数n,1<=n<=100000。
然后是n个整数,这些整数的范围是[1,100000]。
输出格式:
如果这些整数中存在重复的,就输出:
YES
否则,就输出:
NO
输入样例:
5
1 2 3 1 4
输出样例:
YES
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[100005],i,n,k=0,b[100005]={0};
cin>>n;
for(i=1;i<=n;i++){cin>>a[i];b[a[i]]++;}
for(i=1;i<=n;i++){
if(b[a[i]]>1){k=1;break;}
}
if(k)cout<<"YES";
else cout<<"NO";
return 0;
}
7-3-11 排好队了吗?
本题要求编写程序,将输入的n个整数存入数组a中,判断它们是否按从大到小的次序排列好了?
输入格式:
输入在第1行中给出一个正整数n(1≤n≤100),第2行输入n个整数,其间以空格分隔。题目保证数据不超过长整型整数的范围。
输出格式:
如果这n个整数是按照从大到小的次序排列的,则在一行中输出“Yes”,否则,在一行中输出“No”。
输入样例1:
6
1 3 6 40 12 50
输出样例1:
No
输入样例2:
5
10 8 8 3 1
输出样例2:
Yes
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[1005],k=0;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
for(i=0;i<n;i++){
if(a[i]<a[i+1]){k=1;break;}
}
if(k)cout<<"No";
else cout<<"Yes";
return 0;
}
7-3-12 算算评委最终评分
演讲比赛中有n(n<=12)个评委打分,编程求某个选手最终得分(去掉一个最高分和一个最低分后其余分数的平均值)。
输入格式:
第一行输入评委人数n(n<=12),第二行输入n个分数,数据之间用空格分隔。
输出格式:
输出选手最后得分,保留两位小数。
输入样例:
10
8 9 7 6 7 8 9 8 9 7
输出样例:
7.88
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[1005];
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
int max=a[0],min=a[0];double s=0;
for(i=0;i<n;i++){
if(a[i]>max)max=a[i];
if(a[i]<min)min=a[i];
s+=a[i];
}
s=s-min-max;
printf("%.2f",s/(n-2));
return 0;
}
7-3-13 小燕爱偶数*
桌上有若干张卡片,每张卡片上都写着一个整数。小燕喜欢偶数,把写着的偶数卡片全都拿走了。请问她拿走了多少卡片?都写着什么数字?
设卡片总数为 n 张,其中偶数为 m 张。
输入格式
n(0<n<=10000)
n 个整数(以空格间隔)
输出格式
m(0≤m≤n)
m 个偶数(以空格间隔,顺序不变)
输入样例1
6
37 25 -12 90 -1 78
输出样例1
3
-12 90 78
输入样例2
5
37 25 -17 3 -1
输出样例2
0
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,j=0,i,a[10005];
cin>>n;
for(i=0;i<n;i++){
cin>>x;
if(x%2==0)a[j++]=x;
}
cout<<j<<endl;
for(i=0;i<j;i++){
if(i)cout<<' ';
cout<<a[i];
}
return 0;
}
7-3-14 年龄与疾病
任务描述
某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。
输入格式:
共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。
输出格式:
按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。
输入样例:
10
1 11 21 31 41 51 61 71 81 91
输出样例:
20.00%
20.00%
20.00%
40.00%
题目来源
注:该题目选自OpenJudge网站,在线网址:http://noi.openjudge.cn/ch0106/05/
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,i;double a=0,b=0,c=0,d=0;
cin>>n;
for(i=0;i<n;i++){
cin>>x;
if(x>=0&&x<=18)a++;
if(x>18&&x<36)b++;
if(x>35&&x<61)c++;
if(x>60)d++;
}
printf("%.2f%%\n",a/n*100);
printf("%.2f%%\n",b/n*100);
printf("%.2f%%\n",c/n*100);
printf("%.2f%%\n",d/n*100);
return 0;
}
7-4-5 字符转换
本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。
输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。
输入样例:
free82jeep5
输出样例:
825
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;int i,x=0;
getline(cin,s);
for(i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9')
x=x*10+(s[i]-'0');
}cout<<x;
return 0;
}
7-4-7 输出大写英文字母
本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。
输入格式:
输入为一个以回车结束的字符串(少于80个字符)。
输出格式:
按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。
输入样例1:
FONTNAME and FILENAME
输出样例1:
FONTAMEIL
输入样例2:
fontname and filrname
输出样例2:
Not Found
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
map<char,int>b;int k=0;
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z'&&b[s[i]]==0){b[s[i]]=1;k=1;cout<<s[i];}
}if(k==0)cout<<"Not Found";
return 0;
}
7-4-8 找最长的字符串
本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最长的字符串:
The longest is: 最长的字符串
如果字符串的长度相同,则输出先输入的字符串。
输入样例:
5
li
wang
zhang
jin
xiang
输出样例:
The longest is: zhang
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
getchar();
string s[n],x;
for(int i=0;i<n;i++)cin>>s[i];
int y=s[0].size();x=s[0];
for(int i=0;i<n;i++){
if(s[i].size()>y){x=s[i];y=s[i].size();}
}
cout<<"The longest is: "<<x;
return 0;
}
7-4-9 英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#
作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,k;
string s[25],x,t;
while(cin>>x){
if(x=="#")break;
s[j++]=x;
}
for(i=0;i<j-1;i++){
for(k=0;k<j-1-i;k++){
if(s[k].size()>s[k+1].size()){
t=s[k];
s[k]=s[k+1];
s[k+1]=t;
}
}
}
for(i=0;i<j;i++){
cout<<s[i]<<' ';}
return 0;
}
7-4-10 字符串循环左移
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
输入样例:
Hello World!
2
输出样例:
llo World!He
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;int n;
getline(cin,s);
cin>>n;
n%=s.size();
for(int i=n;i<s.size();i++)
cout<<s[i];
for(int i=0;i<n;i++)
cout<<s[i];
return 0;
}
7-4-14 检查密码
本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .
,还必须既有字母也有数字。
输入格式:
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。
注意: 题目保证不存在只有小数点的输入。
输出格式:
对每个用户的密码,在一行中输出系统反馈信息,分以下5种:
- 如果密码合法,输出
Your password is wan mei.
; - 如果密码太短,不论合法与否,都输出
Your password is tai duan le.
; - 如果密码长度合法,但存在不合法字符,则输出
Your password is tai luan le.
; - 如果密码长度合法,但只有字母没有数字,则输出
Your password needs shu zi.
; - 如果密码长度合法,但只有数字没有字母,则输出
Your password needs zi mu.
。
输入样例:
5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6
输出样例:
Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,b,c,d,f;string s;
cin>>n;
getchar();
while(n--){
a=0,b=0,c=0,d=0,f=0;
getline(cin,s);
if(s.size()>=6)d=1;
for(int i=0;i<s.size();i++){
if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))a=1;
else if(s[i]>='0'&&s[i]<='9')b=1;
else if(s[i]=='.')c=1;
else f=1;
}
if(d==0){cout<<"Your password is tai duan le.\n";continue;}
if(f==1){cout<<"Your password is tai luan le.\n";continue;}
if(a==1&&b==0)cout<<"Your password needs shu zi.\n";
else if(a==0&&b==1)cout<<"Your password needs zi mu.\n";
else if(a==1&&b==1)cout<<"Your password is wan mei.\n";
}
return 0;
}