编程31-40

31.判断回文数

编写一个函数来判断一个正整数是否为回文数,若是则返回 1 ,否则返回 0 。所谓回文数是指各位
数字左右对称的数,例如 1221 3553 等。该函数的原型为:
int ispalindrome(int n);
编写主函数,对上述函数进行测试,并找出 1000 n ( 包括 1000 n,1000 ≤ n < 10000) 之间的所
有回文数,按从小到大的次序在屏幕上显示输出,每个数之间用一个空格分隔,最后一个数后面
没有空格
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int ispalindrome(int n);
int main() {
	int n;
	scanf("%d", &n);
	int flag = 0;
	for (int i = 1000; i <= n; i++) {
		if (ispalindrome(i)) {
			if (flag == 0) {
				printf("%d", i);
				flag = 1;
			}
			else {
				printf(" %d", i);
			}
		}
	}
	return 0;
}
int ispalindrome(int n) {
	int a[4];
	for (int i = 0; i < 4; i++) {
		a[i] = n % 10;
		n /= 10;
	}
	if (a[0] == a[3] && a[1] == a[2]) {
		return 1;
	}
	else {
		return 0;
	}
}

32.统计英文字母

输入一个可能带空格字符的字符串 ( 长度不超过 100) ,统计其中各个英文字母的出现次数,不区
分大小写。输出字母 a z 的出现次数,数据间以英文逗号分隔。非英文字母不统计。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void countWord(char ap, int count[]) {//数组的名称相当于指针,在函数中不会被释放
	for (int i = 0; i < 26; i++) {
		if (ap == 'a' + i) {
			count[i]++;
		}
	}
}
int main() {
	char word[100];
	int count[26] = {0};
	gets(word);//用gets函数可以向字符串输入空格
	int len = strlen(word);
	_strlwr(word);//将大写字母转换为小写字母
	for (int i = 0; i < len; i++) {
		countWord(word[i], count);
	}
	int flag = 0;
	for (int i = 0; i < 26; i++) {
		if (flag = 0) {
			printf("%d", count[i]);
			flag = 1;
		}
		else printf(",%d", count[i]);//else后不带大括号只能带一个语句
	}
	return 0;
}

33.找出出现次数最多的字符

编写程序,要求在一个字符串中查找连续出现次数最多的一个字符,并显示其所在的开始下标和
次数。 ( 如果出现最多的字符不止一个,输出最靠前的字符 )
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
	char x[100];
	scanf("%s", x);
	char max=0;//最大个数
	char maxword = x[0];
	int maxpos = 0;
	int i = 0;
	for (int i = 0; i < strlen(x); i++) {
		int count = 0;//计数
		for (int j = 0; i + j < strlen; j++) {
			if (x[i] == x[i + j]) {
				count++;
			}
			else break;
		}
		if (count > max) {
			max = count;
			maxword = x[i];
			maxpos = i;
		}
	}
	printf("%c %d %d", maxword, max, maxpos);
	return 0;
}

34.闰年计算

闰年计算。程序输入一个正整数 Y ,以及另一个正整数 N ,以一个空格分隔。计算从 Y 年开始后的
N 个闰年是哪一年(如果 Y 本身是闰年,则 Y 之后的第一个闰年是 Y )。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int is_leap_year(int year){
	return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 1 : 0;
}
int main(){
	int y, n;
	scanf("%d%d", &y, &n);
	for (int num = 0; num != n; y++){
		if (is_leap_year(y)){
			num++;
		}
	}
	printf("%d", y - 1);
	return 0;
}

35.倒序输出子字符串

编写程序,按下列规则倒序输出子字符串。先输出最后的一个字符,再输出最后两个字符串,在
再出后面三个字符 ..., 最后输出整个字符串。输入的字符串长度不超过 100
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	char ap[100];
	scanf("%s", &ap);
	for (int i = strlen(ap) - 1; i >= 0; i--) {
		for (int j = i; j < strlen(ap); j++) {
			printf("%c", ap[j]);
		}
		if (i != 0) {
			printf(" ");
		}
	}
	return 0;
}

36.单词加密

单词加密。输入一个字符串和一个非负整数 k ,对字符串中的每一个字母,用字母表中其后的第 k
个字母代替,不够 k 个时再从字母 a 循环计数。例如 k=3 是, a d 代替, A D 代替, x a 代替, y
b 代替,保持大小写不变。字符串中的非字母字符不变。字符串的长度不超过 100
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	char ap[100];
	int k;
	scanf("%s %d", ap, &k);
	for (int i = 0; i < strlen(ap); i++) {
		ap[i] = (ap[i] - 'a' + k) % 26 + 'a';
	}
	printf("%s", ap);
	return 0;
}

37.去掉多余的*号

编写程序,去掉字符串末尾多余的星号。输入带星号( * )的字符串和 n ,使字符串尾部的 *
不得多于 n 个;若多于 n 个,则删除多余的 * 号;若少于或等于 n 个,则什么也不做,字符串中间
和前面的 * 号不删除。字符串的长度不超过 200 。字符串中的星号是英文星号。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
	char ap[200];
	int n;
	int count = 0;
	scanf("%s %d", ap, &n);
	int len = strlen(ap);
	int flag = 0;
	for (int i = len - 1; i >= 0; i--) {
		if (ap[i] == '*' && flag == 0) {
			count++;
		}
		else flag = 1;
	}
	for (int i = 0; ; i++) {
		printf("%c", ap[i]);
		if (count <= n) {
			if (i == len) break;
		}
		else {
			if (i == len + n - count - 1) break;
		}
	}
	return 0;
}

38.查找字符位置

查找一个字符在字符串中出现的第一个位置并输出这个位置。位置从0开始
输入:待查找的字符串(字符个数不超过 100)和需要查找的字符,字符串中可能含有空格。
(输入时,待查找的字符串与所需查找的字符用* 号隔开)如: 待查找字符串 * 需要查找的字符”
输出:字符的位置(如有多个相同的字符,只查找第一个,如果没有输出 - 1。)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
	char ap[100];
	char x;
	/*无法识别:
	gets(ap);
	scanf("*%c", &x);*/
	//正确做法
	scanf("%c", &ap[0]);
	int len;
	for (len = 1; ap[len - 1] != '*'; len++) {
		scanf("%c", &ap[len]);
	}
	scanf("%c", &x);
	int pos=0;
	while (ap[pos] != x && pos < len) {
		pos++;
	}
	if (pos == len) {
		printf("-1");
	}
	else printf("%d", pos);
	return 0;
}

39.投票统计

统计选票。三个候选人分别是 Li Zhang Wang Li 的代号是 1 Zhang 的代号是 2 Wang
代号是 3 。依次输入代表得票人代号的数字(即投票),直到输入 - 1 则投票结束。然后统计每个
人的得票数和废票数。不是 - 1,1,2,3 的数字为废票。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	int Li = 0, Zh = 0, Wa = 0, fei = 0;
	int list;
	scanf("%d", &list);
	while (list != -1) {
		switch (list){
			case 1:Li++; break;
			case 2:Zh++; break;
			case 3:Wa++; break;
		default:
			fei++;
		}
		scanf("%d", &list);
	}
	printf("%d %d %d %d", Li, Zh, Wa, fei);
	return 0;
}

40.排列字符串

输入一个字符串(长度不超过 200 ,不包含空格,至少有 1 个字符), 除首尾字符外 ,将其余的字
符按 ascii 降序 排列,然后输出。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void Bubblesort(char a[]);
int main() {
	char a[100];
	scanf("%s", a);
	Bubblesort(a);
	printf("%s", a);//字符串的输出
	return 0;
}
void Bubblesort(char a[]) {
	for (int i = 1; i < strlen(a); i++) {
		for (int j = strlen(a) - 2; j > i; j--) {
			if (a[j] > a[j - 1]) {
				char temp = a[j];
				a[j] = a[j - 1];
				a[j - 1] = temp;
			}
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值