编写一个函数来判断一个正整数是否为回文数,若是则返回1,否则返回0。所谓回文数是指各位数字左右对称的数,例如1221、3553等。该函数的原型为:
int ispalindrome(int n);
其中参数n是待判断的正整数,该函数有返回结果。
编写主函数,对上述函数进行测试,并找出1000∽n (包括1000和n,1000 ≤ n <10000)之间的所有回文数,按从小到大的次序在屏幕上显示输出,每个数之间用一个空格分隔,最后一个数后面没有空格。
样例输入:
1200
样例输出:
1001 1111
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int ispalindrome(int n);
int main()
{
int n,cut=0,i=0;
scanf("%d", &n);
for ( i = 1000; i <= n; i++)
{
if (ispalindrome(i))
{
cut++;
cut == 1 ? printf("%d", i) : printf(" %d",i);
}
}
return 0;
}
int ispalindrome(int n)
{
//scanf("%d",&n)就不需要了,加了之后反而得不到结果
int a = n % 10, b = (n / 10) % 10, c = (n / 100) % 10, d = n / 1000;
if (a == d && b == c)
{
return 1;
}
else {
return 0;
}
}
输入一个可能带空格字符的字符串(长度不超过200),统计其中各个英文字母的出现次数,不区分大小写。输出字母a~z的出现次数,数据间以英文逗号分隔。非英文字母不统计。
输入:可能带空格的字符串。
输出:26个整数,以英文逗号分隔。
样例输入:
World's oldest drink enjoys new success
样例输出:
0,0,2,3,4,0,0,0,1,1,1,2,0,3,3,0,0,2,6,1,1,0,2,0,1,0
//我人傻了,现在是凌晨两点,花费大力气写出来的代码不报错,但是不对,哭死,
//不知道怎么改了,就这样放上去吧
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char str[200];
int i;
int cut[26] = { 0 };
for (i = 0;; i++)
{
scanf("%c", &str[i]);
if (str[i] == 'a' || str[i] == 'A') { cut[0]++; }
if (str[i] == 'b' || str[i] == 'B') { cut[1]++; }
if (str[i] == 'c' || str[i] == 'C') { cut[2]++; }
if (str[i] == 'd' || str[i] == 'D') { cut[3]++; }
if (str[i] == 'e' || str[i] == 'E') { cut[4]++; }
if (str[i] == 'f' || str[i] == 'F') { cut[5]++; }
if (str[i] == 'g' || str[i] == 'G') { cut[6]++; }
if (str[i] == 'h' || str[i] == 'H') { cut[7]++; }
if (str[i] == 'i' || str[i] == 'I') { cut[8]++; }
if (str[i] == 'j' || str[i] == 'J') { cut[9]++; }
if (str[i] == 'k' || str[i] == 'K') { cut[10]++; }
if (str[i] == 'l' || str[i] == 'L') { cut[11]++; }
if (str[i] == 'm' || str[i] == 'M') { cut[12]++; }
if (str[i] == 'n' || str[i] == 'N') { cut[13]++; }
if (str[i] == 'o' || str[i] == 'O') { cut[14]++; }
if (str[i] == 'p' || str[i] == 'P') { cut[15]++; }
if (str[i] == 'q' || str[i] == 'Q') { cut[16]++; }
if (str[i] == 'r' || str[i] == 'R') { cut[17]++; }
if (str[i] == 's' || str[i] == 'S') { cut[18]++; }
if (str[i] == 't' || str[i] == 'T') { cut[19]++; }
if (str[i] == 'u' || str[i] == 'U') { cut[20]++; }
if (str[i] == 'v' || str[i] == 'V') { cut[21]++; }
if (str[i] == 'w' || str[i] == 'W') { cut[22]++; }
if (str[i] == 'x' || str[i] == 'X') { cut[23]++; }
if (str[i] == 'y' || str[i] == 'Y') { cut[24]++; }
if (str[i] == 'z' || str[i] == 'Z') { cut[25]++; }
}
for (i = 0; i <= 25; i++)
{
i = 0 ? printf("%d", cut[0]) : printf(",%d", cut[i]);
}
return 0;
}
// 崔神的答案
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char str[200] = { 0 };//这个0很妙,可以用来作为读取结束的标志
gets_s(str, 200);
char cut[26] = { 0 };
_strupr(str);
for (int i = 0; str[i] != 0; i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
{
cut[str[i] - 'A'] ++;
}
}
printf("%d", cut[0]);
for (int i = 1; i < 26; i++)
{
printf(",%d", cut[i]);
}
编写程序,要求在一个字符串中查找连续出现次数最多的一个字符,并显示其所在的开始下标和次数。(如果出现最多的字符不止一个,输出最靠前的字符)
输入:一个字符串(字符个数不超过100,无空格)
输出:出现最多的字符,次数,开始下标(这三个值之间用空格分隔,末尾无空格)
样例输入:
xyxyzzzqqq1q122334
样例输出:
z 3 4
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char str[100];
scanf("%s", str);
int max = 1;
int maxi = 0;
char maxstr = str[0];
int cmax = 1;
int cmaxi = 0;
char cmaxstr = str[0];
int i = 1;
while (str[i])
{
while (str[i] == cmaxstr)
{
cmax++;
i++;
}
if (cmax > max)
{
maxstr = cmaxstr;
max = cmax;
maxi = cmaxi;
}
cmax = 0;
cmaxstr = str[i];
cmaxi = i;
}
printf("%c %d %d", maxstr, max, maxi);
return 0;
}
闰年计算。程序输入一个正整数Y,以及另一个正整数N,以一个空格分隔。计算从Y年开始后的第N个闰年是哪一年(如果Y本身是闰年,则Y之后的第一个闰年是Y)。
输入格式:两个整数:Y和N。用空格分隔
输出个数:一个整数
样例输入:
2005 3
样例输出:
2016
//终于有道简单题来挽救一下我的自信心
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n, y;
scanf("%d%d", &n, &y);
if (n % 4 == 0) { printf("%d", n + 4 * y); }
else{printf("%d", n + 4-n % 4 + (y-1) * 4);}
return 0;
}
编写程序,按下列规则倒序输出子字符串。先输出最后的一个字符,再输出最后两个字符串,在再出后面三个字符..., 最后输出整个字符串。输入的字符串长度不超过100。
输入:一个字符串(无空格,字符个数不超过100)
输出:空格隔开的子字符串,用一个空格间隔。
输入输出样例:
student
t nt ent dent udent tudent student
样例输入:
a
样例输出:
a
//下面这个是我写的错误代码,实在不知道怎么改了,先放着吧,等我以后
//能力提升再来改它
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
scanf("%s", str);
int i = 0, cut = 0;
// 看看数组长度
for (i = 0; str[i] != 0; i++)
{
cut++;
}
for (int n = cut;; n--)
{
i = 0;
int a = i;
//输出要求的字符
for (a = i; a >=0; a--)
{
printf("%c", str[n - a]);
}
i++;
if (n != 0 && n != cut) { printf(" "); }
}
return 0;
}
//附上崔神的正确代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char str[100] = { 0 };
scanf("%s", str);
int maxi = strlen(str) - 1;
printf("%s", str + maxi);
for (int i = 1; i <= maxi; i++)
{
printf(" %s", str + maxi - i);//注意理解str +maxi表示什么意思
}
return 0;
}
单词加密。输入一个字符串和一个非负整数k,对字符串中的每一个字母,用字母表中其后的第k个字母代替,不够k个时再从字母a循环计数。例如k=3是,a用d代替,A用D代替,x用a代替,y用b代替,保持大小写不变。字符串中的非字母字符不变。字符串的长度不超过100。
输入:一个字符串(无空格)和非负整数k,之间用空格分隔
输出:加密的字符串。
样例输入:
Beijing 9
样例输出:
Knrsrwp
//依旧借鉴了崔神的答案,来不及啦,不管啦
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
char jiami(char str, int n);
int main()
{
char str[100];
int n;
scanf("%s %d", str,&n);
int i = 0;
while (str[i] != 0)
{
str[i] = jiami(str[i], n);
i++;
}
printf("%s", str);//本来想一个一个输的,发现不对,所以字符串应该都得整个输出
return 0;
}
char jiami(char x, int n)
{
if (x >= 'a' && x <= "z")
{
x = 'a' + (x - 'a' + n) % 26;
}
if (x >= 'A' && x <= 'Z')
{
x = 'A' + (x - 'A' + n) % 26;
}
return x;//这玩意可不能忘记
}
编写程序,去掉字符串末尾多余的星号。输入带星号(*)的字符串和n,使字符串尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。字符串的长度不超过200。字符串中的星号是英文星号。
输入:一个字符串(无空格,字符串长度不超过100)和一个非负整数,中间用空格隔开。
输出:去掉多余*号的字符串。
样例:
***street**music**** 2
***street**music**
样例输入:
stree*****tmusic 2
样例输出:
stree*****tmusic
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
/*int main()
{
char str[100] = {0};
char str1[100] = {0};
int n;
scanf("%s %d", str, &n);
int len = strlen(str);
int i=len-1, cut = 0;
while (str[i] == '*')
{
cut++;
i--;
}
if (cut <= n)
{
printf("%s", str);
}
else//新建一个字符串来承载我们要输出的东西
{
for (int m = 0; m <= len - cut + n - 1; m++)
{
str1[m] = str[m];//取出想要的字符
}
printf("%s", str1);
}
return 0;
}
*/
//下面这段是崔神写的,上面是我写的
int main()
{
char str[100] = { 0 };
scanf("%s", str);
int cut = strlen(str)-1;
while (str[cut--] == '*');//找出*的个数
int n;
scanf("%d", &n);
if (strlen(str) - cut - 2 > n)
{
str[cut + 2 + n] = 0;//我看不懂,感觉懂了,又感觉没懂
}
printf("%s", str);
return 0;
}
查找一个字符在字符串中出现的第一个位置并输出这个位置。位置从0开始。
输入输出格式:
输入:待查找的字符串(字符个数不超过100)和需要查找的字符,字符串中可能含有空格。(输入时,待查找的字符串与所需查找的字符用*号隔开)如:“待查找字符串*需要查找的字符”
输出:字符的位置(如有多个相同的字符,只查找第一个,如果没有输出-1。)
样例输入:
fbhby Wml*W
样例输出:
6
//这是读不懂题目写出来的错误代码示范
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char str[100];
char x,cut=0;
scanf("%s*%c", str, &x);
int i = 0;
while (str[i] != '*')
{
if (str[i] == x) { printf("%d", i); cut++; break; }
i++;
}
if (cut == 0) { printf("-1"); }
return 0;
}
//人家本来就是一个字符串,要我们把那个要找的字符先提取出来,再判断位置
//正确代码如下
int main()
{
char str[100], x;
gets_s(str, 100);
int i = 0;
while (str[i++] != '*');
x = str[i];
str[i - 1] = 0;
printf("%d", search(str, x));
return 0;
}
int search(char* str, char x)
{
int i = 0;
while (str[i])
{
if (str[i] == x)
{
return i;
}
i++;
}
return -1;
}
统计选票。三个候选人分别是Li、Zhang和Wang, Li 的代号是1;Zhang的代号是2; Wang的代号是3。依次输入代表得票人代号的数字(即投票),直到输入-1则投票结束。然后统计每个人的得票数和废票数。不是-1,1,2,3的数字为废票。
输入:若干整数,最后一个数是-1。(输入的每个数之间有空格)
输出:四个整数,以空格隔开,代表三个人的Li、Zhang、Wang的得票数以及废票数。
输出格式:"%d %d %d %d\n"
样例输入:
2 2 2 3 3 3 -1
样例输出:
0 3 3 0
//总结反思一下,为啥子这么简单的题都搞错了
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*int main()
{
int str[50];
int m = 0;
scanf("%d", &str[0]);
while (str[m++] != -1)
{
scanf("%d", &str[m++]);
}
int l=0, z=0, w=0, f=0;
int i = 0;
while (str[i] != -1)
{
switch (str[i])
{
case 1:l++; break;
case 2:z++; break;
case 3:w++; break;
}
if (str[i] != 1 && str[i] != 2 && str[i] != 3 && str[i] != -1)
{
f++;
}
}
printf(" % d % d % d % d\n", l, z, w, f);
return 0;
}*///我的错误在于把字符串和一组数给搞混了,以上报废
int main()
{
int n;
int cut[4] = { 0 };
scanf("%d", &n);
while (n != -1)
{
n >= 1 && n <= 3 ? cut[n]++ : cut[0]++;
scanf("%d", &n);
}
printf("%d %d %d %d\n", cut[1], cut[2], cut[3], cut[0]);
return 0;
}
输入一个字符串(长度不超过200,不包含空格,至少有1个字符),除首尾字符外,将其余的字符按ascii码降序排列,然后输出。
样例输入:
announced
样例输出:
auonnnecd
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
/*void Bubblestr(char* str);
int main()
{
char str[200] = {0};
scanf("%s", str);
Bubblestr(str);
printf("%s", str);
return 0;
}
void Bubblestr(char* str)
{
int len = strlen(str);
for (int i = 1; i < len - 2; i++)
{
for (int m = len-2; m >i; m--)
{
if (str[m]>str[m-1])
{
char temp = str[m];
str[m] = str[m--];
str[m--] = temp;
}
}
}
}//尽力了,实在不知道问题出在了哪里,这段代码不对
//经过认真比对,发现错在了str[m--]上面,我也没太搞懂是为什么,以后应该就知道了
*/
//附上正确代码如下
void StrBubbleBetween(char* str, int begin, int end);
int main()
{
char inStr[200] = { 0 };
(void)scanf("%s", inStr);
StrBubbleBetween(inStr, 1, strlen(inStr) - 2);
printf("%s", inStr);
return 0;
}
void StrBubbleBetween(char* str, int begin, int end)
{
for (int i = begin; i < end; i++)
{
for (int j = end; j > i; j--)
{
if (str[j] > str[j - 1])
{
char temp = str[j];
str[j] = str[j - 1];
str[j - 1] = temp;
}
}
}
}