2024
Problem Description 输入一个字符串,判断其是否是C的合法标识符。
Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output 对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
2
12ajf
ff ai_2
Sample Output
no
no
要点:字符可以进行比较
#include <stdio.h>
#include <string.h>
int main() {
int inputnum;
while (scanf("%d", &inputnum) != EOF) {
getchar();
for (; inputnum != 0; inputnum--) {
char string[50];
gets(string);
int flag = 1;
if ((string[0] >= 'a' && string[0] <= 'z') || (string[0] == '_') || (string[0] >= 'A' && string[0] <= 'Z')) {
int i;
for (i = 1; i < strlen(string); i++) {
if ((string[i] >= 'A' && string[i] <= 'Z') || (string[i] == '_') || (string[i] >= '0' && string[i] <= '9') || (string[i] >= 'a' && string[i] <= 'z')) {} else {
flag = 0;
}
}
} else {
flag = 0;
}
if (flag == 1) {
printf("yes\n");
} else {
printf("no\n");
}
}
}
return 0;
}
2025
Problem Description 对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input 输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output 对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。
Sample Input
xxxxx
Sample Output
x(max)x(max)x(max)x(max)x(max)
#include<stdio.h>
#include<string.h>
int main()
{
char input[100];
while(scanf("%s",&input)!=EOF) {
getchar();
int i;
char max = 'A';
for (i=0; i<strlen(input); i++) {
if(input[i]>max) {
max = input[i];
}
}
for (i=0; i<strlen(input); i++) {
printf("%c",input[i]);
if(input[i]==max) {
printf("(max)");
}
}
printf("n");
}
2026
Problem Description 输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input 输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output 请输出按照要求改写后的英文句子。
Sample Input
i like acm
Sample Output
I Like Acm
要点:字符可以进行关系运算,大写A比小写a小32
#include<stdio.h>
#include<string.h>
int main()
{
char input[100];
while(gets(input)!=NULL) {
input[0] = input[0]-32;
int i;
for (i=1; i<strlen(input); i++) {
if(input[i]==' '&&i!=strlen(input)-1) {
input[i+1] = input[i+1]-32;
}
}
printf("%sn",input);
}
return 0;
}
2027
Problem Description 统计每个元音字母在字符串中出现的次数。
Input 输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。
Output 对于每个测试实例输出5行,多个测试实例之间由一个空行隔开。请特别注意:最后一块输出后面没有空行:)
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1
a:2
e:1
i:3
o:0
u:1
#include<stdio.h>
#include<string.h>
int main()
{
int inputnum;
scanf("%d",&inputnum);
getchar();
for(; inputnum!=0; inputnum--){
char input[100];
int count[5];
memset(count,0,sizeof(count));
gets(input);
int i;
for(i=0; i<strlen(input); i++){
if(input[i]=='a'){
count[0]++;
}
else if(input[i]=='e'){
count[1]++;
}
else if(input[i]=='i'){
count[2]++;
}
else if(input[i]=='o'){
count[3]++;
}
else if(input[i]=='u'){
count[4]++;
}
}
printf("a:%d\n",count[0]);
printf("e:%d\n",count[1]);
printf("i:%d\n",count[2]);
printf("o:%d\n",count[3]);
printf("u:%d\n",count[4]);
if(inputnum!=1){
printf("\n");
}
}
return 0;
}
2029
Problem Description “回文串”是正读和反读都一样的字符串,比如“level”就是回文串。请写一个程序判断读入的字符串是否是“回文”。
Input 输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串。
Output 如果一个字符串是回文串,则输出"yes",否则输出"no".
Sample Input
2
level
abcde
Sample Output
yes
no
#include<stdio.h>
#include<string.h>
int main()
{
int inputnum;
while(scanf("%d",&inputnum)!=EOF){
getchar();
for(; inputnum!=0; inputnum--){
char input[100];
gets(input);
int flag = 1;
int i;
for(i=0; i<strlen(input)/2; i++){
if(input[i]!=input[strlen(input)-1-i]){
flag = 0;
}
}
if(flag==1){
printf("yes\n");
}
else{
printf("no\n");
}
}
}
return 0;
}
2030
Problem Description 统计给定文本文件中汉字的个数。
Input 输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output 对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。[Hint:]从汉字机内码的特点考虑~
Sample Input
1
马上就要期末考试了Are you ready?
Sample Output
14
9
笔记:
汉字机内码在计算机的表达方式的描述是,使用两个字节,每个字节最高位一位为1。计算机中,补码第一位是符号位,1表示为负数,所以汉字机内码的每个字节表示的十进制数都是负数。统计输入字符串含有几个汉字,只需求出字符串中小于0(ascii码中为0的字符是空格)的字符有几个,将它除以2就得到答案。
#include<stdio.h>
#include<string.h>
int main()
{
int inputnum;
while(scanf("%d",&inputnum)!=EOF){
getchar();
for(; inputnum!=0; inputnum--){
char input[10000];
gets(input);
int num = 0;
int i;
for(i=0; i<strlen(input); i++){
if(input[i]<' '){
num++;
}
}
printf("%d\n",num/2);
}
}
return 0;
}