题目链接:CSP 201912-1 报数
当时裸考,手生,只拿了70分,当时C++基本库都用不熟,不了解sstream的使用,判断数字里含有7的时候就愣住了,就是个数字转字符串的方法和查找罢了。重温一下啦~
代码如下:
#include<iostream>
#include<vector>
#include<string>
#include <sstream>
#include<cstdlib>
#define N 2000
using namespace std;
/*
str.find() string::npos:为一个很大的数。查找不存在时的返回值
str.rfind()反向查找
因为CSP老旧的编译器,to_string、stoi等很多C++11都无法使用
arr.to_string(int) 数字数组转字符串
cstdlib std::stoi stol stoll 字符串转数字
*/
int main(){
int n,count=0;
cin >> n;
vector<int> sum(4,0);
for(int i=1;i<N+1;i++){
stringstream ss;
ss << i;
string num = ss.str();
int k=i%4;
if(i%7==0||num.find("7")!=string::npos){
if(k==0){
sum[3]++;
}else{
sum[k-1]++;
}
count--;
}
count++;
if(count==n) break;
}
for(int i=0;i<sum.size();i++){
cout << sum[i] << endl;
}
return 0;
}
使用sstream将int转string
int i=12345;
stringstream ss;
ss << i;
string num = ss.str();
本题还有一个要注意的还是数组开大点(或者遍历次数),不够大可能只有70-80分。