文章目录
- A:组队(5分 √)
- B:年号字串(5分 √)
- C: 数列求值(10分 √)
- D: 数的分解(10分 ×)
- F: 特别数的和(15分 √)
A:组队(5分 √)
解法:可以将符合的数写在一个表格中,排序,进行比较
98+99+98+97+98=490
B:年号字串(5分 √)
做法一:
做法二:
a | b | c | d | e | f | g |
---|---|---|---|---|---|---|
h | i | j | k | l | m | n |
o | p | q | r | s | t | u |
v | w | x | y | z | ||
C: 数列求值(10分 √)
答案: 4659
#include<bits/stdc++.h>
using namespace std;
int main(){
/*每个数的后四位*/
int n;
cin>>n;
int a,b,c;
a=b=c=1;
int d;
for(int i = 4; i <= n; i++){
d=a+b+c;
a=b%10000;
b=c%10000;
c=d%10000;
}
cout<<d<<endl;
return 0;
}
D: 数的分解(10分 ×)
#include<bits/stdc++.h>
using namespace std;
//判断是否有2或4
int judge(int n){
while(n){
//判断最后一位的数字
if(n%10==2 || n%10==4){
return 0;
}
//继续减少位数,循环判断取模
n=n/10;
}
//while循环完,没有返回0,就是不存在,返回1.
return 1;
}
int main(){
int cnt=0;
for(int i = 1; i < 2019; i++){
if(judge(i)){
for(int j = 1; j < i; j++){
if(judge(j)){
for(int k = 1; k < j; k++){
if(judge(k)){
if((i+j+k) == 2019){
cnt++;
}
}
}
}
}
}
}
cout<<cnt;
return 0;
}
F: 特别数的和(15分 √)
在循环体中循环时,将每次的数字先转换成字符串;
在当前字符串的长度范围内循环时,判断其中是否有2、0、1、9;若有,立即相加,break退出当前内部循环体的循环,进行下一个数的判断。
注意:使用break(不用continue),是因为一旦符合,立即相加,就无需再判断数字,否则会多加。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int sum=0;
for(int i = 1; i <= n; i++){
string temp = to_string(i);
for(int j = 0; j < temp.length(); j++){
if(temp[j] == '2' || temp[j] == '0' || temp[j] == '1' || temp[j] == '9'){
int num = stoi(temp);
sum+=num;
break;
}
}
}
cout<<sum;
return 0;
}