To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem is that there are always some confusing passwords since it is hard to distinguish 1 (one) from l (L in lowercase), or 0 (zero) from O (o in uppercase). One solution is to replace 1 (one) by @, 0 (zero) by %, l by L, and O by o. Now it is your job to write a program to check the accounts generated by the judge, and to help the juge modify the confusing passwords.

Input Specification:
Each input file contains one test case. Each case contains a positive integer N (≤1000), followed by N lines of accounts. Each account consists of a user name and a password, both are strings of no more than 10 characters with no space.

Output Specification:
For each test case, first print the number M of accounts that have been modified, then print in the following M lines the modified accounts info, that is, the user names and the corresponding modified passwords. The accounts must be printed in the same order as they are read in. If no account is modified, print in one line There are N accounts and no account is modified where N is the total number of accounts. However, if N is one, you must print There is 1 account and no account is modified instead.

Sample Input 1:

3
Team000003 perfectpwd
Team000001 R1spOdfa

Sample Output 1:

2
Team000002 RLsp%dfa
Team000001 R@spodfa

Sample Input 2:

1
team110 abcdefg332

Sample Output 2:

There is 1 account and no account is modified

Sample Input 3:

2
team110 abcdefg222
team220 abcdefg333

Sample Output 3:

There are 2 accounts and no account is modified

之前的题解定义了结构体,较为复杂:

 #include<cstdio>
 #include<iostream>
 #include<cstring>
 using namespace std;

struct Users{
    char num[20];
    char pass[20];
    bool flag = false;
}user[1005];
int main()

  {
    int N;
    int sum=0;
    scanf("%d",&N);
    int i,j;
    for(i=0;i<N;i++)
    {
        scanf("%s %s",user[i].num,user[i].pass);
        for( j=0;j<strlen(user[i].pass);j++)
        {
            if(user[i].flag!=true)
            {
            if(user[i].pass[j]=='1') {user[i].pass[j]='@';user[i].flag=true;break;}
            if(user[i].pass[j]=='0') {user[i].pass[j]='%';user[i].flag=true;break;}
            if(user[i].pass[j]=='l') {user[i].pass[j]='L';user[i].flag=true;break;}
            if(user[i].pass[j]=='O') {user[i].pass[j]='o';user[i].flag=true;break;}

              }
            if(user[i].flag==true)
            {
                sum++;
                break;
            }

          }
      }

    if(sum)
    {
        printf("%d",sum);
        for(int i=0;i<N;i++)
        {
            if(user[i].flag==true)
            {
            printf("\n");
            printf("%s %s",user[i].num,user[i].pass);
              }

          }
      }
      else
      {
        if(N==1)
        {
            printf("There is 1 account and no account is modified");
          }
          else
          {
            printf("There are %d accounts and no account is modified",N);
          }
      }
   } 

更好的是:

#include <iostream>
#include <vector>
using namespace std;
int main() {
         int n;
         scanf("%d", &n);
         vector<string> v;
         for(int i = 0; i < n; i++) {
                 string name, s;
                 cin >> name >> s;
                 int len = s.length(), flag = 0;
                 for(int j = 0; j < len; j++) {
                         switch(s[j]) {
                                 case '1' : s[j] = '@'; flag = 1; break;
                                 case '0' : s[j] = '%'; flag = 1; break;
                                 case 'l' : s[j] = 'L'; flag = 1; break;
                                 case 'O' : s[j] = 'o'; flag = 1; break;
                         }
                  }
         if(flag) {
                 string temp = name + " " + s;
                 v.push_back(temp);
             }
         }
         int cnt = v.size();
         if(cnt != 0) {
                 printf("%d\n", cnt);
                 for(int i = 0; i < cnt; i++)
                 cout << v[i] << endl;
         }
        else if(n == 1) {
                 printf("There is 1 account and no account is modified");
         }
        else {
                 printf("There are %d accounts and no account is modified", n);
         }
             return 0;
}

使用C++里的vectorstring组合将题目解出,省去了使用结构体的麻烦

PAT甲级——1035 Password (20分)的更多相关文章

  1. PAT 甲级 1035 Password (20 分)(简单题)

    1035 Password (20 分)   To prepare for PAT, the judge sometimes has to generate random passwords for ...

  2. PAT Advanced 1035 Password (20 分)

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  3. PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642 题目描述: To prepare for PAT, the judge someti ...

  4. PAT 甲级 1035 Password (20 分)

    1035 Password (20 分) To prepare for PAT, the judge sometimes has to generate random passwords for th ...

  5. PAT 甲级 1077 Kuchiguse (20 分)(简单,找最大相同后缀)

    1077 Kuchiguse (20 分)   The Japanese language is notorious for its sentence ending particles. Person ...

  6. PAT 甲级 1061 Dating (20 分)(位置也要相同,题目看不懂)

    1061 Dating (20 分)   Sherlock Holmes received a note with some strange strings: Let's date! 3485djDk ...

  7. 【PAT甲级】1035 Password (20 分)

    题意: 输入一个正整数N(<=1000),接着输入N行数据,每行包括一个ID和一个密码,长度不超过10的字符串,如果有歧义字符就将其修改.输出修改过多少组密码并按输入顺序输出ID和修改后的密码, ...

  8. PAT (Advanced Level) Practice 1035 Password (20 分)

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  9. 【PAT】1035. Password (20)

    题目:http://pat.zju.edu.cn/contests/pat-a-practise/1035 分析:简单题.直接搜索,然后替换,不会超时,但是应该有更好的办法. 题目描述: To pre ...

随机推荐

  1. 对OpenSSL心脏出血漏洞的试验

    1.安装OpenSSL环境 sudo apt-get install openssl sudo pip install pyopenssl(中间会提示ffi.h 没有那个文件或目录,sudo apt- ...

  2. Objective-C 和 Swift 第三方库使用

    https://www.jianshu.com/p/6be32a047ca7 原文地址: Objective-C 和 Swift 第三方库使用 注1:文章写于2016年9月,(swift 3.0.Xc ...

  3. SQL约束攻击

    本文转载自https://blog.csdn.net/kkr3584/article/details/69223010 目前值得高兴的是,开发者在建立网站时,已经开始关注安全问题了--几乎每个开发者都 ...

  4. idea排除要编译的文件

    感觉应该有更好的方式.VS中可以右键文件从项目中排除 如果要恢复选中要恢复的文件,点击 +下的-即可

  5. mac安装浏览器同步测试工具

    1.安装node.js (1)打开终端,输入以下命令安装Homebrew ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebre ...

  6. 读书笔记 - js高级程序设计 - 第七章 函数表达式

      闭包 有权访问另一个函数作用域中的变量的函数 匿名函数 函数没有名字 少用闭包 由于闭包会携带包含它的函数的作用域,因此会比其它函数占用更多的内存.过度使用闭包可能会导致内存占用过多,我们建议读者 ...

  7. 一个简单的“将ball个球放到box各盒子中,每个盒子不多于m个,并且满足limit条件的状态”的函数

    前段时间,做了一个某游戏的辅助计算工具,其中遇到一个排列组合问题.抽象出来就是 将ball个球放到box各盒子中,每个盒子不多于m个,并且满足limit条件, 请给出所有的这些状态. 随意找了下没有现 ...

  8. kubelet组件详解---链接

    https://blog.csdn.net/jettery/article/details/78891733

  9. .NET技术-3.0. 日志插件 log4net

    .NET技术-3.0. 日志插件 log4net 背景:框架 NetFramework3.5 1. 新建控制台程序 2. 程序包管理器控制台中 增加 Nuget包 Install-Package lo ...

  10. leetcode--200--python(深度广度优先遍历实现代码)

    点滴积累,厚积薄发,做好每一天,向时间要效率,向生命要质量. 一.深度优先搜索和广度优先搜索DFS(Depth-First-Search),是盲目搜索算法的一种.常常用在树的遍历及图的处理上.假设当前 ...