2 条题解
-
0PCT域主&管理员 (wcrong123) LV 6 MOD @ 2024-03-10 12:07:58
开关灯(easy version)题解(讲解):
方法一,数学
开关灯可以转化为求一个数因子的个数,有奇数个因子的数是一个数的平方,最终状态为关。有偶数个因子的数最终状态为开,所以只要求出1~n之间有几个平方数,就可以算出最终状态为开的灯的个数。#include<bits/stdc++.h> using namespace std; int n,ans; int main(){ cin>>n; ans=n-floor(sqrt(n)); cout<<ans<<endl; return 0; }
方法二,模拟
在开关灯的困难版本中会超时。直接模拟开关灯的过程即可。#include<bits/stdc++.h> using namespace std; const int N=1010; int n,a[N],ans; int main(){ cin>>n; memset(a,1,sizeof(a)); for(int i=1;i<=n;i++){ for(int j=i;j<=n;j+=i){ a[j]=(a[j]+1)%2; } } for(int i=1;i<=n;i++){ if(a[i]==1)ans++; } cout<<ans<<endl; return 0; }
-
02024-03-10 11:46:28@
开关灯(easy version)题解(代码):
#include<bits/stdc++.h>//方法一,数学 using namespace std; int n,ans; int main(){ cin>>n; ans=n-floor(sqrt(n)); cout<<ans<<endl; return 0; }
#include<bits/stdc++.h>//方法二,模拟 using namespace std; const int N=1010; int n,a[N],ans; int main(){ cin>>n; memset(a,1,sizeof(a)); for(int i=1;i<=n;i++){ for(int j=i;j<=n;j+=i){ a[j]=(a[j]+1)%2; } } for(int i=1;i<=n;i++){ if(a[i]==1)ans++; } cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 1000
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 9
- 已通过
- 1
- 通过率
- 11%
- 上传者