题目链接:1099B〰
恕我昨晚傻了,其实本来是过了的…大概是昨晚懒得动脑吧
其实这题像是找规律
题意解析
一个方格 两个方格 那么剩下的呢
假设先画出这样 那么根据题意,可以根据已画出的直线平移得到剩下的线 可以画出
那么5个方格和6个方格也是如此画 可以画出和
第789个格子
同理
这里不是很好讲这个规律,各位可以自行在纸上多画几个格子,然后再来看下面
格子的数量n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
笔画数量 | 2 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 6 | 7 | 7 | 7 | 8 | 8 | 8 | 8 | 9 | 9 | 9 | 9 | 10 | 10 | 10 | 10 | 10 |
1个2,1个3 2个4,2个5 3个6,3个7 4个8,4个9 5个10… 这样可以看出规律了吧
我的思想是用一个大循环里面包含两个小循环
来看代码吧
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
while(cin>>n)
{
long long ans=2,ttt=1,pb=1;
//ans是笔画数量,每一个小循环结束加1
//ttt用来记录次数,当次数和n相等时输出ans
//因为有嵌套循环,一旦n==ttt是要退出两个循环的,所以设置了一个变量用以退出嵌套循环
for(long long i=1;;i++){
for(long long w=0;w<i;w++){
if(n==ttt){
cout<<ans<<endl;
pb=0;
break;
}
ttt++;
}
if(pb==0){
break;
}
ans++;
for(int w=0;w<i;w++){
if(n==ttt){
cout<<ans<<endl;
pb=0;
break;
}
ttt++;
}
ans++;
if(pb==0){
break;
}
}
}
return 0;
}