zoukankan      html  css  js  c++  java
  • #C++初学记录(ACM试题1)

    **A - Diverse Strings **
    A string is called diverse if it contains consecutive (adjacent) letters of the Latin alphabet and each letter occurs exactly once. For example, the following strings are diverse: "fced", "xyz", "r" and "dabcef". The following string are not diverse: "az", "aa", "bad" and "babc". Note that the letters 'a' and 'z' are not adjacent.

    Formally, consider positions of all letters in the string in the alphabet. These positions should form contiguous segment, i.e. they should come one by one without any gaps. And all letters in the string should be distinct (duplicates are not allowed).

    You are given a sequence of strings. For each string, if it is diverse, print "Yes". Otherwise, print "No".
    Input
    The first line contains integer n (1≤n≤100), denoting the number of strings to process. The following n lines contains strings, one string per line. Each string contains only lowercase Latin letters, its length is between 1 and 100, inclusive.

    Output
    Print n lines, one line per a string in the input. The line should contain "Yes" if the corresponding string is diverse and "No" if the corresponding string is not diverse. You can print each letter in any case (upper or lower). For example, "YeS", "no" and "yES" are all acceptable.
    Example
    Input
    8
    fced
    xyz
    r
    dabcef
    az
    aa
    bad
    babc
    Output
    Yes
    Yes
    Yes
    Yes
    No
    No
    No
    No
    正确代码

    #include<cstdio>
    #include<cstring>
    int main(){
        char a[105];
        int t;
        scanf("%d", &t);
        while(t--){
            memset(a, 0, sizeof(a));
            scanf("%s", a);
            int len = strlen(a), flag = 0;
            for(int i = 0; i < len; i++){
                for(int j = i+1; j < len; j++){
                    if(a[i] > a[j]){
                        char temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }
            for(int i = 1; i < len; i++){
                if(a[i] - a[i-1] != 1){
                    printf("No
    ");
                    flag = 1;
                    break;
                }
            }
            if(flag == 1){
                continue;
            }else{
                printf("Yes
    ");
            }
        }
        return 0;
    }
    
    

    题目理解
    该题较为简单,该题的正确做法是对输入的字母进行判断,若有相近的字母则输出YES,若没有则输出NO,若输入的是单个字符则也输出YES。
    相关知识点
    %s是进行字符串的整体输入,即

    int c[200];
    scanf("%s",%c);
    

    是将整个字符串拆分成单个字符储存进数组a,即输入abcde则a[1]=b。以及对单个字符进行判断,判断只需要在判断NO和YES是加一点小聪明.

            for(int i = 1; i < len; i++){
                if(a[i] - a[i-1] != 1){
                    printf("No
    ");
                    flag = 1;
                    break;
                }
            }
            if(flag == 1){
                continue;
            }else{
                printf("Yes
    ");
    

    在这个if条件判断中,因为单个字符的长度len=1,所以在进行No的判断中是不符合的,因为No的判断条件是i=1;i<len;因此直接进行else循环。

  • 相关阅读:
    程序设计实践读书笔记(一)
    Markdown语法和MWeb使用说明
    Comparable和Comparator的学习笔记
    WMware给centos6.8虚拟机添加硬盘
    Centos定时自动执行脚本
    linux开机关机自启动或自关闭服务的方式
    jira从windows迁移到linux
    ERROR: transport error 202:bind failed:Address already in use
    linux文件备份到windows方法
    validator验证
  • 原文地址:https://www.cnblogs.com/xiaofengqaq/p/10685409.html
Copyright © 2011-2022 走看看