zoukankan      html  css  js  c++  java
  • C++-POJ1016-Numbers That Count

    无语,15步产生16个数,植树原理啊!

    大水题,居然wa了好几次,唉,自己的问题。

    略略略,就要封装成结构体,略略略。

     1 #include <set>
     2 #include <map>
     3 #include <cmath>
     4 #include <queue>
     5 #include <vector>
     6 #include <cstdio>
     7 #include <cstdlib>
     8 #include <cstring>
     9 #include <iostream>
    10 #include <algorithm>
    11 using namespace std;
    12 struct String {
    13     char s[81];
    14     int len_s,len_b;
    15     int a[10],b[50];
    16     void init() {
    17         memset(s,0,sizeof(s));
    18         memset(a,0,sizeof(a));
    19         memset(b,0,sizeof(b));
    20         len_s=len_b=0;
    21     }
    22     bool read() {
    23         scanf("%s",s+1);
    24         len_s=strlen(s+1);
    25         if(s[1]=='-')return false;
    26         return true;
    27     }
    28     void calc() {
    29         for(int i=1; i<=len_s; i++)a[s[i]-'0']++;
    30         for(int i=0; i<=9; i++)
    31             if(a[i]) {
    32                 if(a[i]<10){
    33                     b[++len_b]=a[i];
    34                     b[++len_b]=i;
    35                 }
    36                 else {
    37                     b[++len_b]=a[i]/10;
    38                     b[++len_b]=a[i]%10;
    39                     b[++len_b]=i;
    40                 }
    41             }
    42     }
    43     void get(String A) {
    44         len_s=A.len_b;
    45         for(int i=1; i<=len_s; i++)
    46             s[i]=A.b[i]+'0';
    47     }
    48     void print_s() {for(int i=1; i<=len_s; i++)cout<<s[i];}
    49 };
    50 bool comp(String A,String B) {
    51     if(A.len_s!=B.len_s)return false;
    52     for(int i=1; i<=A.len_b; i++)if(A.s[i]!=B.s[i])return false;
    53     return true;
    54 }
    55 bool self(String A) {
    56     if(A.len_s!=A.len_b)return false;
    57     for(int i=1; i<=A.len_s; i++)if(A.s[i]-'0'!=A.b[i])return false;
    58     return true;
    59 }
    60 String a[20],A;
    61 int main() {
    62     while(A.read()) {
    63         A.calc(),a[1]=A;
    64         for(int i=2; i<=16; i++) a[i].get(a[i-1]),a[i].calc();
    65         int ans,flag=0;
    66         for(int i=1; i<=15; i++) {
    67             if(flag)break;
    68             if(self(a[i]))
    69                 {flag=1;ans=i-1;break;}
    70             for(int j=i+1; j<=16; j++)
    71                 if(comp(a[i],a[j])) 
    72                     {ans=j-i;flag=2;break;}
    73         }
    74         A.print_s();
    75         if(flag==1)
    76             if(ans==0)cout<<" is self-inventorying"<<endl;
    77             else cout<<" is self-inventorying after "<<ans<<" steps"<<endl;
    78         else if(flag==2)cout<<" enters an inventory loop of length "<<ans<<endl;
    79         else cout<<" can not be classified after 15 iterations"<<endl;
    80         A.init();for(int i=1;i<=16;i++)a[i].init();
    81     }
    82     return 0;
    83 }
    ~~Jason_liu O(∩_∩)O
  • 相关阅读:
    网管必备网站地址
    数组是否包含某个元素
    Thinking in java(八)
    Thinking in java(八)
    Java8系列之重新认识HashMap
    Java8系列之重新认识HashMap
    MarkdownPad2.5/2 注册码
    MarkdownPad2.5/2 注册码
    java8函数式编程(2)
    java8函数式编程(2)
  • 原文地址:https://www.cnblogs.com/JasonCow/p/12268387.html
Copyright © 2011-2022 走看看