假期编程

此博客链接: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:]从汉字机内码的特点考虑~
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;
    
}
出来混总是要还的
原文地址:https://www.cnblogs.com/ping2yingshi/p/12299313.html