第九周作业

编写一个函数来判断一个正整数是否为回文数,若是则返回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;
			}
		}
	}
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值