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

#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

#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.
还有一种思路是分开算,将整数和小数。
犯的错误:数组开的小了

相关推荐

  1. CSU21期末

    2023-12-17 22:24:02       35 阅读
  2. CSS期末复习速览(一)

    2023-12-17 22:24:02       8 阅读
  3. *CSS: 联样式表

    2023-12-17 22:24:02       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 22:24:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 22:24:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 22:24:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 22:24:02       18 阅读

热门阅读

  1. 发起POST请求时同时携带文件和自定义参数

    2023-12-17 22:24:02       36 阅读
  2. linux 内核同步互斥技术之读写自旋锁

    2023-12-17 22:24:02       33 阅读
  3. 基于SpringBoot的个人健康管理系统小程序

    2023-12-17 22:24:02       47 阅读
  4. C++异步网络库workflow系列教程(2)redis任务

    2023-12-17 22:24:02       98 阅读
  5. 算法:删除有序数组中的重复项---双指针[3]

    2023-12-17 22:24:02       35 阅读
  6. 从memcpy()函数中学习函数的设计思想

    2023-12-17 22:24:02       42 阅读
  7. 英语中疑问句

    2023-12-17 22:24:02       31 阅读
  8. 【跨域】同源策略、跨域解决

    2023-12-17 22:24:02       37 阅读
  9. 数字签名介绍

    2023-12-17 22:24:02       38 阅读