问题分析
第一回合:只有40分
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int f1(int m){
if(m%7==0||m==7){
return true;
}
return false;
}
int f2(int m){
int n=m;
while(m){
m=m%10;
if(m==7){
return true;
}
m=m/10;
}
return false;
}
int main(){
cin>>n;
int ans[5]={0};
int count=0;
int m=0;
while(1){
for(int i=0;i<4;i++){
m=m+1;
if(f1(m)||f2(m)){
ans[i]++;
}else{
count++;
}
if(count==n){
break;
}
}
if(count==n){
break;
}
}
for(int i=0;i<4;i++){
cout<<ans[i]<<endl;
}
return 0;
}
第二回合(100分):
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int ans[6];
bool f(int m){
if(m%7==0){
return 1;
}
else{
int n=m;
while(n){
if(n%10==7){
return 1;
}
n/=10;
}
}
return 0;
}
int main(){
cin>>n;
int i;
int count=0;
int m=1;
while(count!=n){
if(f(m)){
ans[(m-1)%4]++;
count--;
}
count++;
m++;
}
for(i=0;i<4;i++){
cout<<ans[i]<<endl;
}
return 0;
}
问题总结
在第一次的基础上做了些优化,但怎么弄,就是得不到100,后来进一步优化。
- 将判断是否含7和是否为7倍数的两个函数合并为一个函数。
- 能不执行的地方就不执行,适当的位置添加
break
和return
。 - 尽量在头文件和循环外部申请变量。
ans[(m-1)%4]++
4个人之间循环报数,比for循环更好。