A1035 Password (20)(20 分)

A1035 Password (20)(20 分)

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
Team000002 Rlsp0dfa
Team000003 perfectpwd
Team000001 R1spOdfa

Sample Output 1:

2
Team000002 RLsp%dfa
Team000001 [email protected]

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

思考

c++的引用很方便,传递参数,传递了操作对象本身,灵魂附体。

c语言没有引用,只能指针取地址。

AC代码

c语言

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
struct node {
    char name[20], password[20];
    bool ischange;
}T[1005];
/*在C语言中是不存在引用的,也就是说C语言中&表示的不是引用,仅仅是取地址符。所以错误提示就是告诉你&在这里用的不对,那怎么解决呢?

首先介绍一个正规的解决方法:用指针来取代引用,在主函数中传进来地址;*/
void crypt(struct node* t, int* cnt) {//c语言结构体必须加struct,typedef可解决此类问题
    int len = strlen(t->password);
    for(int i = 0; i < len; i++) {
        if(t->password[i] == ‘1‘) {
            t->password[i] = ‘@‘;
            t->ischange = true;
        } else if(t->password[i] == ‘0‘) {
            t->password[i] = ‘%‘;
            t->ischange = true;
        } else if(t->password[i] == ‘l‘) {
            t->password[i] = ‘L‘;
            t->ischange = true;
        } else if(t->password[i] == ‘O‘) {
            t->password[i] = ‘o‘;
            t->ischange = true;
        }
    }
    if(t->ischange) {
        (*cnt)++;//优先级很重要,先解指针,再自增1,遇到优先级没把握,加括号,都加上
    }
}

int main() {
    int n, cnt = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        scanf("%s %s", T[i].name, T[i].password);
        T[i].ischange = false;//初始化为未修改
    }
    for(int i = 0; i < n; i++) {
        crypt(&T[i], &cnt);
    }
    if(cnt == 0) {
        if(n == 1) printf("There is %d account and no account is modified", n);
        else {
            printf("There are %d accounts and no account is modified", n);
        }
    }else {
        printf("%d\n", cnt);
        for(int i = 0; i < n; i++) {
            if(T[i].ischange) {
                printf("%s %s\n", T[i].name, T[i].password);
            }
        }
    }
    return 0;
}

c++

#include <cstdio>
#include <cstring>
struct node {
    char name[20], password[20];
    bool ischange;
}T[1005];

void crypt(node& t, int& cnt) {//引用,可以对传入参数进行修改
    int len = strlen(t.password);
    for(int i = 0; i < len; i++) {
        if(t.password[i] == ‘1‘) {
            t.password[i] = ‘@‘;
            t.ischange = true;
        } else if(t.password[i] == ‘0‘) {
            t.password[i] = ‘%‘;
            t.ischange = true;
        } else if(t.password[i] == ‘l‘) {
            t.password[i] = ‘L‘;
            t.ischange = true;
        } else if(t.password[i] == ‘O‘) {
            t.password[i] = ‘o‘;
            t.ischange = true;
        }
    }
    if(t.ischange) {
        cnt++;
    }
}

int main() {
    int n, cnt = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        scanf("%s %s", T[i].name, T[i].password);
        T[i].ischange = false;
    }
    for(int i = 0; i < n; i++) {
        crypt(T[i], cnt);
    }
    if(cnt == 0) {
        if(n == 1) printf("There is %d account and no account is modified", n);
        else {
            printf("There are %d accounts and no account is modified", n);
        }
    }else {
        printf("%d\n", cnt);
        for(int i = 0; i < n; i++) {
            if(T[i].ischange) {
                printf("%s %s\n", T[i].name, T[i].password);
            }
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/lingr7/p/9452825.html

时间: 2024-08-29 23:14:04

A1035 Password (20)(20 分)的相关文章

pat 1035 Password(20 分)

1035 Password(20 分) 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) fro

20.20 告警系统主脚本;20.21 告警系统配置文件;20.22 告警系统监控项目

1. 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件. 2. 程序架构: bin下是:主程序 conf下是:配置文件 shares下是:各个监控脚本 mail下是:邮件引擎 log下是:日志 20.20 告警系统主脚本 约定:所有脚本都放在 /usr/local/bin目录下! shell项目-告警系统main.sh 1. 在/usr/local/bin/目录下,创建一个mo

20.20 告警系统主脚本20.21 告警系统配置文件20.22 告警系统告警系统监控项目

20.20 告警系统主脚本以后约定所有的shell脚本都放到这个目录下cd /usr/local/sbin创建以下目录主脚本放到bin下vi main.sh 写入以下内容:#!/bin/bash#Written by aming. 是否发送邮件的开关 export send=1 过滤ip地址 export addr=/sbin/ifconfig |grep -A1 "ens33: "|awk '/inet/ {print $2}'dir=pwd 只需要最后一级目录名(这里是最后一级目录

MVC4 学习笔记 之 URL中存在编译的空格 20%20%

/Config/Edit/QQCC%20%20%20%20%20%20%20 原因是: 通过EF直接添加了空格? NO 是因为你的数据库字段设计问题,因为你当然设计如>:sID nchar(10) 那你一定想输入10个字符,但实际你只输入了必个,所以后面数据自动帮你补空了. 从EF数据库取出数据,在绑定的时候为安全,编码了,所以显示%20,代表一个空格. MVC4 学习笔记 之 URL中存在编译的空格 20%20%,布布扣,bubuko.com

请从L=[1,10,20,50,20,20,1]中找出重复数。

1 L=[1,10,20,50,20,20,1] 2 L1=[] 3 for i in L: 4 if(L.count(i)>1): 5 L1.append(i) 6 L2=[] 7 for i in L1: 8 if i not in L2: 9 L2.append(i) 10 print L2 原文地址:https://www.cnblogs.com/Python-XiaCaiP/p/8521517.html

1035 Password (20 分)(字符串)

注意下单复数 #include<bits/stdc++.h> using namespace std; pair<string,string>pa; int main() { int n; scanf("%d",&n); vector<pair<string,string> >vec; for(int i=0;i<n;i++){ char a[20],b[20]; scanf("%s %s",a,b);

C++&#183;PAT乙级1012.数字分类 (20/20)

/* 1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数字. 输入格式: 每个输入包含1个测试用例.每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的

PAT A1035 Password

题目描述: 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 uppe

20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目

原文地址:https://www.cnblogs.com/sisul/p/8921743.html