假期编程
此博客链接:https://www.cnblogs.com/ping2yingshi/p/12299313.html
1.汉字统计(15min)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2030
Problem Description
统计给定文本文件中汉字的个数。
Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。
[Hint:]从汉字机内码的特点考虑~
[Hint:]从汉字机内码的特点考虑~
Sample Input
2
WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa!
马上就要期末考试了Are you ready?
Sample Output
14
9
题解:
方法:汉字占两个字节,肯定不在ASCII内。
思路:定义一个字符数组接收输入的字符,对每个字符进行判断,如果字符不在0~255之间即为汉字。
代码如下:
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> int main(void) { int str; int n; scanf("%d",&n); getchar(); while(n>0) { int count=0; int i; char c[1000]; gets(c); str=strlen(c); for(i=0;i<str;i++) { if(c[i]<0||c[i]>255) count++; } printf("%d\n",count/2); n--; } return 0; }
2.密码(27min)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2043
Problem Description
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
Input
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
Output
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
Sample Input
3
a1b2c3d4
Linle@ACM
^~^@^@!%
Sample Output
NO
YES
NO
题解:
方法:1.密码长度大于16小于8的就不是安全密码。
2.密码长度对了,但是密码不是由题目给的四组类型中至少三种组成的不是安全密码。
思路:
定义一个数组接收输入的字符,先判断密码长度是否符合要求,不符合要求就不是安全密码,定义四个count计算有多少种类型,最后把四种类型数求和,看是否大于等于3,是即是安全密码。
注意:当那种类型数大于0时,最后求和之前把那种类型赋值为1,因为求和求的是有几种类型,不是每种类型种有多少个。
代码如下:
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> int main(void) { int k; int str; int n; scanf("%d",&n); getchar(); while(n>0) { int flag=1; int count1=0; int count2=0; int count3=0; int count4=0; int sum=0; char c[100]; gets(c); str=strlen(c); if(str>=8&&str<=16) { for(k=0;k<str;k++) { if(c[k]>='a'&&c[k]<='z') { flag=1; count1++; } else if(c[k]>='A'&&c[k]<='Z') { flag=1; count2++; } else if(c[k]>='0'&&c[k]<='9') { flag=1; count3++; } else if(c[k]=='~'||c[k]=='!'||c[k]=='@'||c[k]=='#'||c[k]=='$'||c[k]=='%'||c[k]=='^') { flag=1; count4++; } else { flag=0; break; } } } else flag=0; if(count1!=0) count1=1; if(count2!=0) count2=1; if(count3!=0) count3=1; if(count4!=0) count4=1; sum=count1+count2+count3+count4; if(flag==1) { if(sum>=3) printf("YES\n"); else printf("NO\n") ; } if(flag==0) printf("NO\n"); n--; } return 0; }
出来混总是要还的