• 一道超级坑爹的水题(ACdream oj 无耻的出题人)


    

    A - 无耻的出题人

    Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 65536/32768 KB (Java/Others) 

    Problem Description

    听到X神要參加比赛,仅仅会Fibnacci数的出题人被吓得哭晕在厕所。为了防止X神AK(ALL KILL)比赛题目,无耻的出题人仅仅好在题面上做些手脚(加密)。当中一道题的题目描写叙述例如以下:

    hjxh dwh v vxxpde,mmo ijzr yfcz hg pbzrxdvgqij rid stl mc zspm vfvuu vb uwu spmwzh.

    比赛的时候X神对题面研究了四个多小时。最终发现了一丝规律,而且破解出了前四个单词hjxh dwh v vxxpde相应是:give you a number。

    可是比赛时间所剩不多。X神须要你的帮助(在解密题面之后帮他写一个能够ac的代码o(╯□╰)o)。

    Input

    输入包括多组数据。 每组数据一个数字n, n在long long范围内。

    Output

    对于每组測试数据,输出答案。

    Sample Input

    1
    2
    3
    4
    5
    -1
    -2
    

    Sample Output

    1
    2
    3
    4
    5
    1
    2

    这道题上次做的时候,看了半天题都没看懂,后来最终看到前面那个提示Fibnacci数,感觉找到了一点突破口,后面发现后面数据太大了,自己手推推的肯定好费劲。然后决定自己写个程序给他翻译出来。然后就開始写翻译程序,開始也卡了我好久,今天想起了这个题,回过头来再做了一下,问题都迎刃而解啦,换一种思路果然就豁然开朗了,感觉我写翻译程序的代码比提交这个题目的代码还多,坑爹的题啊。。。。题目要依据Fibnacci数翻译给的那段英文,英文就是题目,原文和密文之间相差一个Fibnacci数。

    以下是我翻译题目的代码:

    #include<stdio.h>
    #include<cstring>
    char s[28]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    int main()
    {
        long long a[100];
        a[0]=1;a[1]=1;
        for(int i=2;i<100;i++)
            a[i]=a[i-1]+a[i-2];
        char c[100];
        gets(c);
        for(int i=0,x=0;i<strlen(c);)
          {
             for(int j=1;j<=26;j++)
             {
                 if(c[i]==s[j])
                 {
                     c[i]=s[(j-a[x]%26+26)%26];//题目的26个字母是循环的
                     i++;x++;
                     break; 
                 }
                 else if(c[i]==' '||c[i]==',')
                 {
                 	  i++;   
                 }
             }
          }
        printf("%s",c);
        //puts(c);
    }

    这里我们就能够发现原来题目居然是要我们求所给数字的各位数字的和,(就仅仅算数字的和)

    解决题目的代码:

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        char s[100];
        while(scanf("%s",s)!=EOF)
        {
            int sum=0;
            for(int i=0;s[i];i++)
            {
                if(s[i]>='0' && s[i] <='9')
                    sum+=s[i]-'0';
            }
            printf("%d
    ",sum);
        }
    }
    
    一个10多行代码就解决的题啊。。

    。。搞了我这么久。

    。。

  • 相关阅读:
    git stash
    vim 使用
    git 分支管理
    git 日常使用
    js createElement
    git checkout
    2.2链表 链表中倒数第k个结点
    1.8字符串及分析 翻转子串
    全排列
    1.7数组 清除行列
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6749755.html
Copyright © 2020-2023  润新知