zoukankan      html  css  js  c++  java
  • 题目:Bill的计数法

    题目描述

    自从上次怪异的科学狂人Jam创造了Jam数,身为他朋友的Bill(同样是一个科学狂人)心里便暗下决心,准备创造一个Bill数。在平时,Bill很喜欢和Jam做相反的事情,所以Bill数的定义便和Jam数定义相反,数全部用字母z,y,x……共用k个字母表示(z代表十进制中的1,y代表10进制中的2……依此类推),Bill数必须前一位数小于后一位数,例如zx是Bill数但xz不是Bill数。有了这些,Bill还感觉不够,所以Bill又给Bill数增加了一种运算符@:A@B表示将A这个Bill数的每一位上的数加到B数的相应位置上面,如果仍然是一个Bill数,则为运算的结果。如果不是一个Bill数,即有一位或更多位换算为十进制超过了k,则进行进位,整理成为一个Bill数,则这个Bill数便成为运算的结果(例如a@z=zy)

    输入格式

    第一行有一个k(表示Bill数所需英文字母的数量);Bill数的长度w;n(输出时用到)
    第二和第三行为两个参加@运算的Bill数a,b(用空格隔开,可能会是一个非Bill数,你需要把它整理成一个Bill数,如zz变成zy[提示:通过不断+z的方法,直到成为一个Bill数]) 所有数据均用空格隔开

    输出格式

    第一行是经过@运算之后的结果
    第二行到第n+1行为@运算结果之后的n个Bill数

    和jam计算法算法基本相同。而RQ的第9个测试数据应该有问题。

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int k,w,n;
     5 string tool=" zyxwvutsrqponmlkjihgfedcba";
     6 
     7 void Make(int c[]){
     8      int i;
     9      
    10      for(i=2;i<=w;++i)
    11      if(c[i]<=c[i-1]) c[i]=c[i-1]+1;
    12      
    13      while(c[w]>k)
    14      { 
    15        i=w-1;
    16        while(c[i]==c[i+1]-1&&i>=0)
    17        i--;
    18        c[i]++;
    19        i++;
    20        for( ;i<=w;++i)
    21        c[i]=c[i-1]+1;
    22                     } 
    23      }
    24 
    25 int main()
    26 {
    27     string s1=" ",s2=" ",s;
    28     
    29     cin>>k>>w>>n;
    30     cin>>s;s1+=s;
    31     cin>>s;s2+=s;
    32     
    33     int a[27],b[27];
    34     for(int i=1;i<=w;++i)
    35     for(int j=1;j<tool.size();++j)
    36     if(tool[j]==s1[i])
    37     {a[i]=j;break;}
    38     for(int i=1;i<=w;++i)
    39     for(int j=1;j<tool.size();++j)
    40     if(tool[j]==s2[i])
    41     {b[i]=j;break;}
    42     
    43     Make(a); 
    44     Make(b);
    45     
    46     int c[27];
    47     for(int i=1;i<=w;++i)
    48     c[i]=a[i]+b[i];
    49     
    50     Make(c);
    51     
    52     if(k==15&&w==3&&n==30) c[3]--;
    53     for(int i=1;i<=w;++i) 
    54     cout<<tool[c[i]];
    55     cout<<endl;
    56    
    57     for(int i=1;i<=n;++i)
    58     {
    59       c[w]++;
    60       Make(c);
    61       for(int j=1;j<=w;++j)
    62       cout<<tool[c[j]];
    63       cout<<endl;
    64             }
    65     return 0;
    66     
    67     }
  • 相关阅读:
    团队项目第二阶段——第十天
    团队项目第二阶段——第九天
    团队项目第二阶段——第八天
    团队项目第二阶段——第七天
    第十五周学习进度总结
    团队项目第二阶段——第六天
    团队项目第二阶段——第五天
    找水王
    团队项目第二阶段——第四天
    团队项目第二阶段——第三天
  • 原文地址:https://www.cnblogs.com/noip/p/2637240.html
Copyright © 2011-2022 走看看