文章目录
-
- 2021、发工资
- 2022、在二维数组中,寻找绝对值最大的数
- 2023、求平均成绩
- 2024、C语言合法标识符
- 2025、查找最大字母,并在其后插入字符串
- 2026、首字母变大写
- 2027、统计元音字母的个数
- 2028、Lowest Common Multiple Plus[求n个数的最小公倍数]
- 2029、Palindromes _easy version[判断回文字符串]
- 2030、汉字统计
2021、发工资
财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
Input
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。
n=0表示输入的结束,不做处理。
Output
对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
Sample Input
3
1 2 3
0
Sample Output
4
Code
给老师发工资,老师的工资都是正整数,人民币一共有100元、50元、10元、5元、2元和1元六种。最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?理解题意,不难
/* 老师的工资都是正整数,人民币一共有100元、50元、10元、5元、2元和1元六种。 最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? */
#include<iostream>
using namespace std;
int main(){
int n,salary,sum;//老师人数[1,99]while(cin>>n){
if(n==0) return 0;sum=0;for(int i=0;i<n;i++){
cin>>salary;while(salary>0){
if(salary>=100){
sum=sum+salary/100;salary=salary%100;}else if(salary>=50){
sum=sum+salary/50;salary=salary%50;}else if(salary>=10){
sum=sum+salary/10;salary=salary%10;}else if(salary>=5){
sum=sum+salary/5;salary=salary%5;}else if(salary>=2){
sum=sum+salary/2;salary=salary%2;}else{
sum=sum+salary;salary=0;}}//while循环 }//for循环 cout<<sum<<endl;} return 0;
}
2022、在二维数组中,寻找绝对值最大的数
输入m行n列的数据,输出其中绝对值最大的数所在的行数,列数和数据
如果有多个绝对值相等的数值,则输出行号最小的那个
若行号也相同,则输出列数最小的那个
Input
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
Sample Input
2 3
1 4 -3
-7 3 0
Sample Output
2 1 -7
Code
对二维数组排序,不难
/* 输入m行n列的数据,输出其中绝对值最大的数所在的行数,列数和数据 如果有多个绝对值相等的数值,则输出行号最小的那个 若行号也相同,则输出列数最小的那个 */
#include<iostream>
#include<cmath>
using namespace std;int scoreArray[100][100];
int main(){
int m,n;//m行n列 while(cin>>m>>n){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>scoreArray[i][j];}}//寻找scoreArray[]数组中绝对值最大的数int maxscore=scoreArray[0][0],k,s;for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(abs(maxscore)<abs(scoreArray[i][j])){
maxscore=scoreArray[i][j];k=i+1;s=j+1;}}}cout<<k<<" "<<s<<" "<<maxscore<<endl;}
}
2023、求平均成绩
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1
Code
n个学生,每个学生有m门课的成绩,计算每个学生的平均成绩以及每门课的平均成绩.
利用结构体数组保存每个学生的数据
/* n个学生,每个学生有m门课的成绩 计算每个学生的平均成绩以及每门课的平均成绩 */
#include<iostream>
#include<iomanip>
using namespace std;struct Student{
int score[5];//每门课的成绩double aver_score;//平均成绩
}stu[50];int main(){
int n,m,sum;//n[1,50] m[1,5]while(cin>>n>>m){
for(int i=0;i<n;i++){
sum=0;for(int j=0;j<m;j++){
cin>>stu[i].score[j];sum=sum+stu[i].score[j];}stu[i].aver_score=(double)sum/(double)m;}//计算每门课的平均成绩double aver_subject[5]; for(int i=0;i<m;i++){
sum=0;for(int j=0;j<n;j++){
sum=sum+stu[j].score[i];}aver_subject[i]=(double)sum/(double)n;}//该班级中各科成绩均大于等于平均成绩的学生数量int count=0;bool flag;for(int i=0;i<n;i++){
flag=true;for(int j=0,k=0;j<m;j++,k++){
if(stu[i].score[j]<aver_subject[k]){
flag=false;break;}}if(flag==true){
count++;}}//输出cout<<setiosflags(ios::fixed);for(int i=0;i<n;i++){
if(i==0)cout<<setprecision(2)<<stu[i].aver_score;elsecout<<" "<<setprecision(2)<<stu[i].aver_score;}cout<<endl;for(int i=0;i<m;i++){
if(i==0)cout<<setprecision(2)<<aver_subject[i];elsecout<<" "<<setprecision(2)<<aver_subject[i];}cout<<endl;cout<<count<<endl<<endl;}
}
2024、C语言合法标识符
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
Code
注意换行符的影响
/*C语言合法标识符: C语言中规定标识符只能由字母、数字和下划线3种字符组成 且第一个字符必须为字母或下划线,即第一个字符不能是数字。 题目:输入一个字符串,判断其是否是合法标识符 */
#include<iostream>
#include<cstring>
using namespace std;char ch[100];
int main(){
int n;cin>>n;char c[2];gets(c);//消除换行符的影响,gets()从缓冲区读取一个字符串存储到字符指针变量 c所指向的内存空间//使用gets()函数缓冲区不会遗留换行符 while(n--){
gets(ch);//cin遇到空格会停止输入 int len=strlen(ch);bool flag=true;for(int i=0;i<len;i++){
if(isdigit(ch[0])!=0){
//以数字开始 flag=false;cout<<"no"<<endl;break;}if(!isalnum(ch[i])&&ch[i]!='_'){
//isalnum()判断字符是否为字母或数字 flag=false;cout<<"no"<<endl;break;}}if(flag==true){
cout<<"yes"<<endl;}}return 0;
}
2025、查找最大字母,并在其后插入字符串
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)
Code
查找一串字符串中最大的字母,在该字母后插入字符串(max)
思路:两次遍历,第一次找到最大值,第二次遍历与最大值进行比较,相等的时候输出"(max)"
/* 查找一串字符串中最大的字母,在该字母后插入字符串(max) 思路:两次遍历,第一次找到最大值,第二次遍历与最大值进行比较,相等的时候输出"(max)" */
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char c[100];while(cin>>c){
int len=strlen(c);char maxc=c[0];for(int i=0;i<len;i++){
if(maxc<c[i]){
maxc=c[i];}}//最大的字符maxcfor(int i=0;i<len;i++){
cout<<c[i];if(maxc==c[i]){
cout<<"(max)"; //输出的时候显示 }}cout<<endl; }return 0;
}
2026、首字母变大写
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
Code
将空格后的第一个字母变为大写
/*对于一个英文句子,将句子中每个单词的第一个字母改成大写字母 思路:遍历字符串,除第一个字符外,每遇到一个空格,将其下一个字符转变为大写 小写字母转化为大写字母,-32 */
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char s[101];while(gets(s)){
int len=strlen(s);for(int i=0;i<len;i++){
if(i==0){
s[i]=s[i]-32;}else if(s[i]==' '){
i++;s[i]=s[i]-32;}}puts(s);//输出字符串,系统会自动在其后加一个换行符 }
}
2027、统计元音字母的个数
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
请特别注意:最后一块输出后面没有空行:)
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1a:2
e:1
i:3
o:0
u:1
Code:
统计一行字符串中元音的个数
//统计一行字符串中元音字母的个数
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n;cin>>n;char a[2]; gets(a);char s[101];while(n--){
gets(s);int len=strlen(s);int num[5]={
0};//统计元音字母的个数 for(int i=0;i<len;i++){
switch(s[i]){
case 'a':num[0]++;break;case 'e':num[1]++;break;case 'i':num[2]++;break;case 'o':num[3]++;break;case 'u':num[4]++;break;default:break;}}if(n==0){
cout<<"a:"<<num[0]<<endl;cout<<"e:"<<num[1]<<endl;cout<<"i:"<<num[2]<<endl;cout<<"o:"<<num[3]<<endl;cout<<"u:"<<num[4]<<endl;}else{
cout<<"a:"<<num[0]<<endl;cout<<"e:"<<num[1]<<endl;cout<<"i:"<<num[2]<<endl;cout<<"o:"<<num[3]<<endl;cout<<"u:"<<num[4]<<endl<<endl; }}return 0;
}
2028、Lowest Common Multiple Plus[求n个数的最小公倍数]
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 6
3 2 5 7
Sample Output
12
70
Code
求n个数的最小公倍数,转化为求两个数的最小公倍数
//求n个数的最小公倍数,每两个数求一次最小公倍数 #include<iostream>
using namespace std;int comMul(__int64 x,__int64 y){
__int64 a=x*y;if(x<y){
__int64 temp=x;x=y;y=temp;}__int64 t=x%y;while(t!=0){
x=y;y=t;t=x%y;}return a/y;
}
int main(){
int n;while(cin>>n){
__int64 a,b,c,result;cin>>a>>b;result=comMul(a,b);for(int i=2;i<n;i++){
cin>>c;result=comMul(result,c); }cout<<result<<endl;}return 0;
}
2029、Palindromes _easy version[判断回文字符串]
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
Input
输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串。
Output
如果一个字符串是回文串,则输出"yes",否则输出"no".
Sample Input
4
level
abcde
noon
haha
Sample Output
yes
no
yes
no
Code
//判断一个字符串是否是回文字符串
#include<iostream>
#include<cstring>
using namespace std;
char c[1000];
int main(){
int n;cin>>n;while(n--){
cin>>c;int len=strlen(c);bool flag=true;for(int i=0;i<len/2;i++){
if(c[i]!=c[len-1-i]){
flag=false;cout<<"no"<<endl;break;}}if(flag==true){
cout<<"yes"<<endl;}}return 0;
}
2030、汉字统计
统计给定文本文件中汉字的个数。
Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。
[Hint:]从汉字机内码的特点考虑~
Sample Input
2
WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa!
马上就要期末考试了Are you ready?
Sample Output
14
9
Code
注意汉字机内码的特点
//统计给定文本中汉字的个数
//一个汉字占两个字节,汉字机内码的每个字节表示的十进制数都是负数
#include<iostream>
#include<cstring>
using namespace std;
char str[10000];
int main(){
int n;cin>>n;char a[2];gets(a);while(n--){
gets(str);int len=strlen(str);int count=0;for(int i=0;i<len;i++){
if(str[i]<0){
count++;}}cout<<count/2<<endl;//记得除以2}return 0;
}