CSU21级期末

问题 C: 21级期末机试-密码设置(20分)

[命题人 : 外部导入]

时间限制 : 1.000 sec 内存限制 : 128 MB

题目描述

小南有个密码本,详细记录着她在每个网站上的密码,但是有的密码设置可能存在安全问题,她想请聪明的你帮她看看密码设置是否正确。安全密码的判断有以下几个规则:

(1)密码长度必须≥8

(2)包含数字

(3)包含大写字母

(4)包含小写字母

(5)至少包含6个特殊字符(! @ # $ * ~)中的一个

以上规则,除(1)必须满足外,其他四个条件至少满足其中三个才是安全的密码。

输入

多组样例。每行一个样例,输入一个字符串S代表密码,字符串S的长度len(S)满足:1≤len(S)≤30,且只包含密码设置要求的数字、字母和特殊字符,无其他非法字符。

输出

对于每一组样例,输出一个判断结果。如果满足安全密码的设置要求则输出yes,不满足则输出no。每个输出占一行。

样例输入 Copy

ttttttttt

123Aa~

123456QqWe

aQwe!1234

123$#abc

样例输出 Copy

no

no

yes

yes

yes

c 复制代码
#include<stdio.h>
#include<string.h>
int main(void)
{
	char arr[31] = { 0 };
	while (~scanf("%s", &arr))
	{
		int sum = 0;
		int flag1 = 0, flag2 = 0, flag3 = 0, flag4 = 0;
		int n = strlen(arr);
		if (n >= 8)
		{
			for (int i = 0; i < n; i++)
			{
				if (arr[i] >= '1' && arr[i] <= '9')
					flag1 = 1;
				else if (arr[i] >= 'A' && arr[i] <= 'Z')
					flag2 = 1;
				else if (arr[i] >= 'a' && arr[i] <= 'z')
					flag3 = 1;
				else if (arr[i] == '!' || arr[i] == '@' || arr[i] == '#' || arr[i] == '$' || arr[i] == '*' || arr[i] == '~')
					flag4 = 1;
			}
			if (flag1 == 1)sum++;
			if (flag2 == 1)sum++;
			if (flag3 == 1)sum++;
			if (flag4 == 1)sum++;
			if (sum >= 3)
			{
				printf("yes\n");
			}
			else
			{
				printf("no\n");
			}
		}
		else
		{
			printf("no\n");
		}
	}
	return 0;
}

问题 D: 21级期末机试-实数相加(10分)

[命题人 : 外部导入]

时间限制 : 1.000 sec 内存限制 : 128 MB

题目描述

C语言就要期末考试了,经过一学期的学习,小南学会了分数相加、分数相减、大整数相加,可就是没有尝试过将两个最大达400位的实数相加。在调试过程中,小南遇到了很多问题,一直解决不了。你能帮他编写一个程序实现两个实数相加吗?

输入

多组样例。每行输入一个样例包括两个用空格分开的实数x和y,其中x和y是长度不大于400位的非负实数。注意,非负实数中也可能包括非负整数,正整数会省略小数点和后面的0,只包括整数部分。

输出

对于每一行输入,输出两个实数x和y相加的结果。输出结果中整数部分的前面和小数部分的末尾不输出多余的0;如果是整数,不输出小数点和小数点后面的0。每个输出占一行。

样例输入 Copy

1.1 2.9

1.1111111111 2.3444323343

1 1.1

1.1111 1.1889

样例输出 Copy

4

3.4555434454

2.1

2.3

c 复制代码
#include<stdio.h>
#include<string.h>
#define count(xLength,xzheng,x,xxiao) \
 for (int i = 0; i < xLength; i++)\
{\
	if (x[i] != '.')\
		xzheng++;\
	else\
	{\
		xxiao = xLength - xzheng - 1;break;\
	}\
		}
#define MAX(x,y) x>y?x:y

void fuxiaoshu(char* x, int xzheng, char* xnew, int xxiao)
{
	while (*xnew != 0) xnew++;
	for (int i = xzheng +1;i < xzheng + 1 + xxiao; i++)
	{
		*xnew = x[i];
		xnew++;
	}
}
int main(void)
{
	char x[410] = { 0 };
	char y[410] = { 0 };
	while (~scanf("%s %s", x, y))
	{

		int xLength = strlen(x), xzheng = 0, xxiao = 0;
		int yLength = strlen(y), yzheng = 0, yxiao = 0;
		count(xLength, xzheng, x, xxiao);
		count(yLength, yzheng, y, yxiao);
		int mzheng = MAX(xLength, yLength);
		char xnew[900] = { 0 }, ynew[900] = { 0 };
		if (xzheng >= yzheng)
		{
			strncpy(xnew, x,xzheng);
			for (int i = 0; i < xzheng - yzheng; i++)
			{
				ynew[i] = '0';
			}
			strcat(ynew, y);
			for (int i = xzheng; i < yLength+xzheng; i++)
			{
				ynew[i] = 0;
			}
		}
		else
		{
			strncpy(ynew, y,yzheng);
			for (int i = 0; i < yzheng - xzheng; i++)
			{
				xnew[i] = '0';
			}
			strcat(xnew, x);
			for (int i = yzheng; i <yLength+yzheng; i++)
			{
				xnew[i] = 0;
			}
		}
		mzheng = (MAX(xzheng, yzheng)) + (MAX(xxiao, yxiao))+1;
		fuxiaoshu(x, xzheng, xnew, xxiao);
		fuxiaoshu(y, yzheng, ynew, yxiao);
		char arr[900] = { 0 };
			for (int i = mzheng-2; i>=1;i--)
			{
				if (xnew[i] == 0)
					xnew[i] = '0';
				if (ynew[i] ==0 )
					ynew[i] = '0';
				arr[i] += xnew[i] - '0' + ynew[i] - '0'+'0';
				if (arr[i] -'0' >= 10)
				{
					arr[i] -= 10;
					arr[i - 1]++;
				}
			}
			arr[0] += xnew[0] - '0' + ynew[0] - '0';
			printf("%d", arr[0]);
			arr[0] += '0';
			for (int i = 1; i < (MAX(xzheng, yzheng)); i++)
			{
				printf("%c", arr[i]);
			}
			int nn = strlen(arr)-1;
			while (arr[nn] == '0'&&nn>= (MAX(xzheng, yzheng)))
			{
				arr[nn] = 0;
				nn--;
			}
			if (nn+1 > (MAX(xzheng, yzheng)))
			{
				printf(".%s\n", arr + (MAX(xzheng, yzheng)));
			}
			else
			{
				printf("\n");
			}
	}
	return 0;
}

我的思路是把整数和小数的小数点去掉,当作一个大的字符串相加。给少的前面补齐0,后面补齐0.

还有一种思路是分开算,将整数和小数。

犯的错误:数组开的小了

相关推荐
余额不足121383 小时前
C语言基础十六:枚举、c语言中文件的读写操作
linux·c语言·算法
罗伯特祥4 小时前
C调用gnuplot绘图的方法
c语言·plot
嵌入式科普5 小时前
嵌入式科普(24)从SPI和CAN通信重新理解“全双工”
c语言·stm32·can·spi·全双工·ra6m5
lqqjuly6 小时前
特殊的“Undefined Reference xxx“编译错误
c语言·c++
2401_858286117 小时前
115.【C语言】数据结构之排序(希尔排序)
c语言·开发语言·数据结构·算法·排序算法
2401_858286118 小时前
109.【C语言】数据结构之求二叉树的高度
c语言·开发语言·数据结构·算法
KevinRay_9 小时前
Linux系统编程深度解析:C语言实战指南
linux·c语言·mfc·gdb
灵槐梦9 小时前
【速成51单片机】2.点亮LED
c语言·开发语言·经验分享·笔记·单片机·51单片机
LittleStone839710 小时前
C语言实现旋转一个HWC的图像
c语言
stm 学习ing12 小时前
HDLBits训练5
c语言·fpga开发·fpga·eda·hdlbits·pld·hdl语言