题目:hdu 1041 Computer Transformation
思路:打表,找规律
#include <cstdio> #include <iostream> #include <cmath> #include <algorithm> #include <cstring> using namespace std; string solve(string s) { string str=""; for(int i=0;i<s.size();i++) if(s[i]=='0') str+="10"; else str+="01"; return str; } int get(string s) { int ans=0; for(int i=1;i<s.size();i++) if(s[i]=='0' && s[i-1]=='0') ans++; return ans; } int main() { string s="1"; for(int i=0;i<20;i++) { cout<<i<<":"<<get(s)<<endl; //cout<<i<<":"<<s<<":"<<get(s)<<endl; s=solve(s); } return 0; }
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin=new Scanner(System.in); BigInteger dp[]=new BigInteger[1010]; dp[0]=BigInteger.ZERO; dp[1]=BigInteger.ZERO; BigInteger two=BigInteger.valueOf(2); for(int i=2;i<1010;i++) { if(i%2==1) dp[i]=dp[i-1].multiply(two).subtract(BigInteger.ONE); else dp[i]=dp[i-1].multiply(two).add(BigInteger.ONE); } while(cin.hasNext()) { int n=cin.nextInt(); System.out.println(dp[n]); } } }