4 条题解
-
0
方格填数(诡异版)
分享一个有趣的规律~
写一个无脑dfs,跑前30个应该都是没有问题的,然后把这30个数打表:
int a[N]={0,3,6,6,18,30,66,126,258,510,1026,2046,4098,8190,16386,32766,65538,131070,262146,524286,1048578,2097150,4194306,8388606,16777218,33554430,67108866,134217726,268435458,536870910,1073741826,};看后面的大数,更容易注意到,现在这个数差不多是前一个数的两倍噢!然后发现有细微的不同...这个时候不要慌,发现这个细微的不同基本上都出现在个位上,所以期望通过一些加减运算等得出规律。
从N=3开始(N=1,2都无法构成一个真正意义上的“圈”,赋特值即可),观察前面的小数:
N=3: ans = (6-3)* 2 = 6 N=4: ans = (6+3)* 2 = 18 N=5: ans = (18-3)* 2 = 30 N=6: ans = (30+3)* 2 = 66 ......好了,规律很显然了...
#include<bits/stdc++.h> #define int unsigned long long using namespace std; const int N=51; int n,dp[N]; void init(int n){ dp[0]=0,dp[1]=3,dp[2]=6;//!!! for(int i = 3;i<=n;i++){ if(i%2)dp[i]=(dp[i-1]-3)*2; else dp[i]=(dp[i-1]+3)*2; } } signed main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); init(N); while(cin>>n){cout<<dp[n]<<'\n';} return 0; }好神奇好有趣好诡的规律
信息
- ID
- 248
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 17
- 已通过
- 10
- 上传者