杭电ACM OJ 1041 Computer Transformation 水(用笨办法做出来 看输出 直接找到规律 灵性无比)

本文详细解析了杭电ACM在线判题系统OJ中编号为1041的Computer Transformation问题。通过分析题目输出,作者发现了隐藏的规律,并用直观易懂的方法阐述了解题思路,展现了问题解决的灵活性。
摘要由CSDN通过智能技术生成

Computer Transformation

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8545    Accepted Submission(s): 3223


Problem Description
A sequence consisting of one digit, the number 1 is initially written into a computer. At each successive time step, the computer simultaneously tranforms each digit 0 into the sequence 1 0 and each digit 1 into the sequence 0 1. So, after the first time step, the sequence 0 1 is obtained; after the second, the sequence 1 0 0 1, after the third, the sequence 0 1 1 0 1 0 0 1 and so on. 

How many pairs of consequitive zeroes will appear in the sequence after n steps? 
 

Input
Every input line contains one natural number n (0 < n ≤1000).
 

Output
For each input n print the number of consecutive zeroes pairs that will appear in the sequence after n steps.
 

Sample Input
  
  
2 3
 

Sample Output
  
  
1 1
翻译:初始是1(1可以变成01 0可以变成10)
第一次1变成01
第二次0变成 10 1变成 01 结果就是 1001 以此类推
样例输入中的2和3就是这个操作进行几次
输出就是两个0是靠近的情况的对数有几对
做法:直接用笨办法做 看了一下输出 直接得出规律 强势无比
第5位 是11 等于1 + 1 + 3 + 5 =10,10 + 1 = 11(这里给他多加个1)
第6位 是 21 等于 1 + 1 + 3 + 5 + 11 = 21 (这里不用多加1)
第7位 是 43 等于 1 + 1 + 3 + 5 + 11 + 21 = 42,42 + 1 = 43(这里给他多加1)
规律就出来了
代码:没有贴根据规律写的代码,而且也不用写,这么简单。重要的是找到规律的方法
package ACM1000_1099;

public class ComputerTransformation1041 {
    // TODO: 2017/12/5 直接撸出来 再看规律
    void calculate() {

        int times = 10;

        int[] current = {1};

        for (int i = 0; i < times; i ++) {

            int len = current.length;
            int[] a = new int[len * 2];

            //赋值操作
            for (int j = 0; j < len; j ++) {
                if (current[j] == 1) {
                    a[2 * j] = 0;
                    a[2 * j + 1] = 1;
                } else {
                    a[2 * j] = 1;
                    a[2 * j + 1] = 0;
                }
            }

            current = a;

//            for (int k = 0; k < current.length; k ++) {
//                System.out.print(current[k] + " ");
//            }
//            System.out.println();

            int all = 0;
            int cur = 2;
            for (int k = 0; k < current.length; k ++) {
                if (cur == 0 && current[k] == 0) {
                    all ++;
                }
                cur = current[k];
            }
            System.out.println(all + " ");
        }
    }

    public static void main(final String[] args) throws Exception {
        ComputerTransformation1041 c = new ComputerTransformation1041();
        c.calculate();
    }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值