2021 发工资咯:)
#include<bits/stdc++.h>
int main(){
int n;
while(~scanf("%d",&n)){
if(n==0) break;
int sum=0,individual=0;
for(int i=0;i<n;i++){
scanf("%d",&individual);
int bai = individual/100;
int wushi = (individual-bai*100)/50;
int shi = (individual-bai*100-wushi*50)/10;
int wu = individual%10/5;
int er = (individual%10-5*wu)/2;
int yi = individual%10-5*wu-er*2;
sum += bai+wushi+shi+wu+er+yi;
}
printf("%d\n",sum);
}
return 0;
}
2022 海选女主角
#include<bits/stdc++.h>
int main(){
int m,n;
while(~scanf("%d %d",&m,&n)){
int max=0,num,loc = 1;
for(int i=1;i<=m*n;i++){
scanf("%d",&num);
if( abs(max)<abs(num) ){
max = num;
loc = i;
}
}
printf("%d %d %d\n",loc%n==0?loc/n:loc/n+1,loc%n==0?n:loc%n,max);
}
return 0;
}
2023 求平均成绩
#include<bits/stdc++.h>
int main(){
int n,m;
while(~scanf("%d %d",&n,&m)){
double exam[n][m];
for(int j=0;j<n;j++){
for(int i=0;i<m;i++){
scanf("%lf",&exam[j][i]);
}
}
for(int i=0;i<n;i++){
double sum=0;
for(int j=0;j<m;j++){
sum += exam[i][j];
}
if(i>0) printf(" ");
printf("%.2f",sum/m); //每个学生的平均成绩
if(i==(n-1)) printf("\n");
}
double class_aver[m];
for(int i=0;i<m;i++){
double sum=0;
for(int j=0;j<n;j++){
sum += exam[j][i];
}
class_aver[i] = sum/n;
if(i>0) printf(" ");
printf("%.2f",sum/n); //每门课的平均成绩
if(i==(m-1)) printf("\n");
}
int num=0;
for(int i=0;i<n;i++){
int sign=0;
for(int j=0;j<m;j++){
if(exam[i][j]>=class_aver[j]) sign++;
}
if(sign==m) num++;
}
printf("%d\n",num);
printf("\n");
}
return 0;
}
2024 C语言合法标识符
C语言合法标识符要求:
由字母数字下划线组成且首字符不能是数字。不允许有空格。
#include<bits/stdc++.h>
int main(){
int n;
while(~scanf("%d",&n)){
getchar();
char ch;
for(int i=0;i<n;i++){
int len=0;
int sign=0;
while(~scanf("%c",&ch)){
if(ch=='\n') break;
if(len==0 && !((65<=ch && ch<=90) || (97<=ch && ch<=122) || ch==95)) sign++;
if(len!=0 && !((65<=ch && ch<=90) || (97<=ch && ch<=122) || ch==95 || (48<=ch&&ch<=57))) sign++;
len++;
}
if(sign==0) printf("yes\n");
else printf("no\n");
}
}
return 0;
}
2025 查找最大元素
#include<bits/stdc++.h>
int main(){
char ch[100],letter,max='a';
int len=0;
while(~scanf("%c",&letter)){
if(letter=='\n') {
if(len==0) break;
for(int i=0;i<len;i++){
if(ch[i]==max) printf("%c(max)",ch[i]);
else printf("%c",ch[i]);
}
printf("\n");
max='a';
len=0;
}else{
ch[len]=letter;
len++;
if(letter>max) max=letter;
}
}
return 0;
}
2026 首字母变大写
#include<bits/stdc++.h>
int main(){
char ch[100],letter;
int len=0,sign=0;
while(scanf("%c",&letter)){
if(letter=='\n'){
if(len==0) break;
for(int i=0;i<len;i++){
if(i==0 || sign){
printf("%c",(97<=ch[i]&&ch[i]<=122)?ch[i]-32:ch[i]);
sign=0;
}
else if(ch[i]==32){
sign=1;
printf(" ");
}
else{
printf("%c",ch[i]);
}
}
printf("\n");
len=0;
}else{
ch[len] = letter;
len++;
}
}
return 0;
}
2027 统计元音
#include<bits/stdc++.h>
int main(){
int n;
char letter;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
int num[5]={0,0,0,0,0};
while(scanf("%c",&letter)){
if(letter=='\n'){
printf("a:%d\n",num[0]);
printf("e:%d\n",num[1]);
printf("i:%d\n",num[2]);
printf("o:%d\n",num[3]);
printf("u:%d\n",num[4]);
if(i!=(n-1)) printf("\n");
break;
}
switch (letter){
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;
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;
}
}
}
return 0;
}
2028 Lowest Common Multiple Plus
计算最小公倍数,如果写成a*b/gcd(a,b),可能会溢出导致WA。所以写成a/gcd(a,b) *b。
我也尝试改数据类型为long long int,但是还是WA。不知道为什么。
#include<bits/stdc++.h>
int GCD(int a, int b){
return b==0?a:GCD(b, a%b);
}
int main(){
int n;
while(~scanf("%d",&n)){
int num[n];
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
for(int i=0;i<n-1;i++){
num[i+1] = num[i+1] / GCD(num[i],num[i+1]) * num[i];
}
printf("%d\n",num[n-1]);
}
return 0;
}
2029 Palindromes _easy version
因为不知道每一行的字符串的长度,所以预先定义一个较长的字符串数组。感觉有点不严谨。
#include<bits/stdc++.h>
int main(){
int n;
scanf("%d",&n);
char ch[2048];
while(n--){
int sign=0;
scanf("%s",&ch);
int start=0,end=strlen(ch)-1;
while(start<end){
if(ch[start]!=ch[end]) {
sign=1;
break;
}
else start++,end--;
}
if(sign) printf("no\n");
else printf("yes\n");
}
return 0;
}
2030 汉字统计
了解汉字机内码需要先了解ASCII码。
ASCII码使用7位二进制数(最高位为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
比如:字母A的ASCII码:0100 0001;字母a的ASCII码:0110 0001
汉字机内码,又称“汉字ASCII码”,简称“内码”,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。
国标码的机内码为二字节长的代码,它是在相应国标码的每个字节最高位上加“1”,即
汉字机内码=汉字国标码+8080H
比如:啊”字的国标码是3021H(0011 0000 0010 0001),其汉字机内码则是B0A1H(1011 0000 1010 0001)
还需要知道,强制类型转换(int),可以把char类型转换为ASCII码数值,并且是带正负的。并且在有符号整数中,最高为0表示整数,1表示负数。
这样的话,很容易可以看到,汉字机内码的每一个字节(10110000 10100001),如果转换成有符号整数的话,都是负数。
举例:
张 机内码 D5C5(1101 0101 1100 0101)
张 补码(1010 1011 1011 1011)即十进制 -43 -59
峰 机内码 B7E5(1011 0111 1110 0101)
峰 补码 (1100 1001 1001 1011)即十进制 -73 -27
这样,只要把输入的每一个字节都转换成ASCII码,找到相邻的两个负数就表示存在一个汉字。
#include<bits/stdc++.h>
int main(){
int n;
scanf("%d",&n);
getchar();
char ch[666];
while(n--){
char letter;
double sign=0;
while(scanf("%c",&letter)){
if(letter=='\n') break;
if(int(letter)<0) {
sign +=0.5;
//printf("%d",int(letter)); //输出转换后十进制整数
}
}
printf("%d\n",(int)sign);
}
return 0;
}