Computer TransformationTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2921 Accepted Submission(s): 1111
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 |
找规律题:
ans[i] = 2*ans[i-1]+1(i%2==0)
ans[i] = 2*ans[i-1]-1(i%2==1)
#include <iostream>
using namespace std;
int ans[1000][100];
int main()
{
int n;
memset(ans,0,sizeof(ans));
for(int i=2;i<=1000;i++)
{
for(int j=0;j<100;j++)
ans[i][j]=ans[i-1][j];
int t=0;
if(i&1)
{
for(int j=0;j<100;j++)
{
t=t+ans[i][j]*2;
ans[i][j]=t%1000000;
t/=1000000;
}
ans[i][0]-=1;
}
else
{
for(int j=0;j<100;j++)
{
t=t+ans[i][j]*2;
ans[i][j]=t%1000000;
t/=1000000;
}
ans[i][0]+=1;
}
}
while(scanf("%d",&n)!=EOF)
{
int k=99;
if(n==1) { puts("0");continue;}
while(ans[n][k]==0) k--;
printf("%d",ans[n][k]);
k--;
for(int j=k;j>=0;j--)
printf("%06d",ans[n][j]);
putchar(10);
// for(int j=99;j>=0;j--)
// cout<<ans[n][j];
}
return 0;
}
贴一下wa的java代码:
package a1;
import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
BigInteger one,a,b;
BigInteger[] ans=new BigInteger[1001];
int i,n;
one=BigInteger.valueOf(1);
ans[1]=BigInteger.valueOf(0);
ans[2]=BigInteger.valueOf(1);
ans[3]=BigInteger.valueOf(1);
for(i=4;i<1001;i++)
{
if(i%2==0)
{
ans[i]=(ans[i-1].add(ans[i-1])).add(one);
}
else
{
ans[i]=(ans[i-1].add(ans[i-1])).subtract(one);
}
}
while(in.hasNext())
{
n=in.nextInt();
System.out.println(ans[n]);
}
}
}