刷题记录
刷题记录
1.P1179 [NOIP2010 普及组] 数字统计
解题思路:
声明一个整型变量,作为计数器,再计算两个值之间2的出现次数
核心代码:
while(g!=0){
if(g%10==2)ans++;
g/=10;
}
我的代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int l,r,ans=0;
cin>>l>>r;
for(int i=l;i<=r;i++){
int g=i;
while(g!=0){
if(g%10==2)ans++;
g/=10;
}
}
cout<<ans<<endl;
return 0;
}
2.P1307 [NOIP2011 普及组] 数字反转
解题思路:
声明待输入数和输出数,输出数扩充一位给输入数最后一位,输入数再舍去最后一位
核心代码:
for(na;na!=0;na/=10) nb=nb*10+na%10;
我的代码
#include <iostream>
using namespace std;
int na,nb=0;
int main(){
cin>>na;
for(na;na!=0;na/=10) nb=nb*10+na%10;
cout<<nb;
}
3.P1075 [NOIP2012 普及组] 质因数分解
解题思路:
从小到大轮流除,找到最小因数,质因数/最小因数=最大因数
核心代码:
for(int i=2;i<=n;++i){
if(n%i==0){
cout<<n/i;
return 0;
}
}
我的代码:
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=2;i<=n;++i){
if(n%i==0){
cout<<n/i;
return 0;
}
}
}
4.P1980 [NOIP2013 普及组] 计数问题
解题思路:
每个数都进行判断,使用计数器计数
核心代码:
for(i=1;i<=n;i++){
temp=i;
while(temp!=0){
t=temp%10;
temp/=10;
if(t==x) c++;
}
我的代码:
#include <iostream>
using namespace std;
int n,x,temp,i,t,c;
int main(){
cin>>n>>x;
for(i=1;i<=n;i++){
temp=i;
while(temp!=0){
t=temp%10;
temp/=10;
if(t==x) c++;
}
}
cout<<c<<endl;
return 0;
}
5.P2141 [NOIP2014 普及组] 珠心算测验
解题思路:
暴力查找
核心代码:
for(i=1;i<=n;i++){
cin>>a[i];
tf[a[i]]++;
}
for (i=1;i<=n;i++){
for(g=1+1;g<=n;g++){
ti[a[i]+a[g]]++;
mn=max(mn,a[i]+a[g]);
}
}
for(i=1;i<=mn;i++){
if(ti[i]>0&&tf[i]) ans++;
}
我的代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int M=20005;
int ti[M],tf[M],n,a[205],ans,mn,i,g;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
tf[a[i]]++;
}
for (i=1;i<=n;i++){
for(g=1+1;g<=n;g++){
ti[a[i]+a[g]]++;
mn=max(mn,a[i]+a[g]);
}
}
for(i=1;i<=mn;i++){
if(ti[i]>0&&tf[i]) ans++;
}
cout<<ans;
}
6.P2669 [NOIP2015 普及组] 金币
解题思路:
自加,后减去超出部分
核心代码:
for(i=1;k-i>0;k-=i++){
coin+=i*i;
}
cout<<coin+k*i;
我的代码:
#include <cstdio>
#include <iostream>
using namespace std;
long long int k,i,coin;
int main(){
cin>>k;
for(i=1;k-i>0;k-=i++){
coin+=i*i;
}
cout<<coin+k*i;
}