学习报告:第3天

(86) 2024-06-21 09:01:03

s

题目描述:网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^,&;

给你一个密码,你的任务就是判断它是不是一个安全的密码。

输入:输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。

输出:对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

样例输入:

3
a1b2c3d4
Linle@ACM
^~^@^@!%

样例输出:

NO
YES
NO

这道题不难就是很麻烦,代码如下:

#include <stdio.h> #include <string.h> int main() { char str[55]; int M; int i,j,teap,len,sum; scanf("%d",&M); for(i=0;i<M;i++){ int folg1=0,folg2=0,folg3=0,folg4=0; teap=1; scanf("%s",str); len=strlen(str); if(len<8||len>16){ teap=0; } for(j=0;j<len;j++){ if(str[j]>48&&str[j]<58){ folg1++; if(folg1>=2){ folg1--; } } if(str[j]>64&&str[j]<91){ folg2++; if(folg2>=2){ folg2--; } } if(str[j]>96&&str[j]<123){ folg3++; if(folg3>=2){ folg3--; } } if(str[j]<49||str[j]>57&&str[j]<65||str[j]>90&&str[j]<97||str[j]>122){ folg4++; if(folg4>=2){ folg4--; } } sum=folg1+folg2+folg3+folg4; } if(sum<3){ teap=0; } if(teap==1){ printf("YES\n"); } else{ printf("NO\n"); } } }

题目描述

一个微调密码锁是这样的一种锁,这种锁你仅能转动密码盘。这是一种常见的密码盘,通过仅在允许的组中改变这些密码盘以微调某个值。
设想一行有D个编号的密码盘,每个密码盘顺序有0到9共九个数字。这类似于密码箱的组合锁。
下面是一系列B按钮,每个按钮标记有D位数字。例如,D可能是4标记就是1000 1200 1002 0111.按标记为1000的按钮,则仅转动第一个转盘一次,而其他转盘不动,而按按钮1002则转第一个转盘一次,转第四个转盘两次,剩下的不动。每个盘按循环的方式转动,即如果转到9,再转一次,就又转回0.
你的任务是模仿这样一个上锁的微调密码锁,给出最终的各密码盘的读数。

输入

输入的每个测试数据的第一行包含有D个数字(至多10个),表示密码盘的起始位置。接下来的每一行有一排有标记的按钮,表示下一次会按的按钮。

输出

对每个测试用例用一行输出最终各密码盘的读数。

样例输入 

0001 1003 0206 0034 1111 1003

样例输出 

3348

这个题目看着很疑惑,就是可以考虑我们的输入就是让计算机来决定的,所以使用多组输入,第一次见这样子的题目,代码如下:

#include <stdio.h> #include <string.h> int main() { int arr[11],i,len; char str[100]; for(i=0;i<11;i++){ arr[i]=0; } while(scanf("%s",str)!=EOF){ len=strlen(str); for(i=0;i<len;i++){ arr[i]=str[i]-'0'+arr[i]; if(arr[i]>9){ arr[i]=arr[i]-10; } } } for(i=0;i<len;i++){ printf("%d",arr[i]); } }

题目描述:

在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:

1. 把每个单词的首字母变为大写。

2. 把数字与字母之间用下划线字符(_)分开,使得更清晰

3. 把单词中间有多个空格的调整为1个空格。

我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。

假设用户输入的串长度不超过200个字符。

输入:

例如:

用户输入:

you and     me what  cpp2005program

用户输入:

this is     a      99cat

输出:

则程序输出:

You And Me What Cpp_2005_program

则程序输出:

This Is A 99_cat

样例输入:

you and     me what  cpp2005program
this is     a      99cat

样例输出:

You And Me What Cpp_2005_program
This Is A 99_cat

这个题目看着不难其实,要考虑的东西很多,比如加入‘——’有没有可能导致数组越界,这就是一个很大的问题,代码如下:

#include <stdio.h> #include <string.h> int main() { int len,i,j=1,sum; char str[201],arr[201]={0},teap; gets(str); len=strlen(str); if(str[0]>57){ arr[0]=str[0]-32; } else{ arr[0]=str[0]; } for(i=1;i<len;i++){ if(str[i-1]==32&&str[i]!=32&&str[i]>57){ arr[j]=str[i]-32; j++; continue; } arr[j]=str[i]; j++; if(str[i-1]==32&&str[i]==32){ j--; } } len=j; for(i=0;i<len;i++){ str[i]=arr[i]; } sum=len; for(i=0,j=0;i<len;j++,i++){ arr[j]=str[i]; if(str[i]>47&&str[i]<58&&(str[i-1]>57||str[i-1]<48)&&str[i-1]!=32){ arr[j]='_'; j++; arr[j]=str[i]; sum++; } if(str[i]>47&&str[i]<58&&(str[i+1]>57||str[i+1]<48)&&str[i+1]!=32){ arr[j]=str[i]; j++; arr[j]='_'; sum++; } } if(arr[0]=='_'&&arr[sum-1]=='_'){ for(i=1;i<sum-1;i++){ printf("%c",arr[i]); } } else if(arr[0]=='_'){ for(i=1;i<sum;i++){ printf("%c",arr[i]); } } else if(arr[sum-1]=='_'){ for(i=0;i<sum-1;i++){ printf("%c",arr[i]); } } else{ puts(arr); } }

学习总结:明天学东西,听mooc的课,刷oj的题先放一下,明天主要听课,听完晚上把字符串剩下的题目写了,然后开始写洛谷的题目!

THE END

发表回复