zoukankan      html  css  js  c++  java
  • [bzoj1081]超级格雷码

    手动模拟一组样例,可以理解大致应该如何操作
    具体实现中,记录每一位当前应该+1还是-1,然后操作最低的位并将后面的+1和-1全部取反即可

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,b,a[105],flag[105];
     4 void write(){
     5     for(int i=1;i<=n;i++)
     6         if (a[i]<10)printf("%d",a[i]);
     7         else printf("%c",a[i]-10+'A');
     8     printf("
    ");
     9 }
    10 int main(){
    11     scanf("%d%d",&n,&b);
    12     for(int i=1;i<=n;i++)flag[i]=1;
    13     while (1){
    14         write();
    15         int i=1;
    16         for(;i<=n;i++)
    17             if ((0<=flag[i]+a[i])&&(flag[i]+a[i]<b)){
    18                 a[i]+=flag[i];
    19                 for(int j=i-1;j;j--)flag[j]*=-1;
    20                 break;
    21             }
    22         if (i>n)break;
    23     }
    24 }
    View Code
  • 相关阅读:
    final finally finalize区别
    final 有什么用
    Java基础(一) 八大基本数据类型
    22
    21
    20
    18
    17
    16
    15
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11811301.html
Copyright © 2011-2022 走看看