青岛市程序设计竞赛冲刺②

发布时间 2023-04-22 22:03:59作者: 天雷小兔

2022青岛市小学组第三题

原题:

 

 

 

 

 

 代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,ans=0,t;
int main(){
	freopen("turn.in","r",stdin);
	freopen("turn.out","w",stdout);
	cin>>n;t=sqrt(n);
	if(n==2)cout<<0;
	else if(t*t!=n)cout<<-1;
	else{
		ans=n-2+1;
		while(t!=2){
			ll tmp=(t-1)*(t-1);
			ans+=tmp-t+1;
			t--;
		}
		cout<<ans;
	}
	return 0;
}

  

 

解题思路:

分三种情况,第一种,n=2,直接输出0

      第二种,sqrt(n)2≠n,直接输出-1

      第三种,sqrt(n)2=n,这个数会每次先遍历到n,从n开方,遍历到(sqrt(n)-1),从(sqrt(n)-1)2开方,重复执行这种操作,直至开方结果等于2,累计次数即为答案