【题解】【模拟】—— [CSP-J2019]数字游戏
P5660 [CSP-J2019] 数字游戏
前置知识:字符串、数组、计数排序。
[CSP-J2019] 数字游戏
题目描述
小 K 同学向小 P 同学发送了一个长度为 8 8 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1 1 1。
注意:01 字符串为每一个字符是 0 0 0 或者 1 1 1 的字符串,如 101
为一个长度为 3 3 3 的 01 字符串。
输入格式
输入文件只有一行,一个长度为 8 8 8 的 01 字符串 s s s。
输出格式
输出文件只有一行,包含一个整数,即 01 字符串中字符 1 \mathbf 1 1 的个数。
输入 #1
00010100
输出 #1
2
输入 #2
11111111
输出 #2
8
提示
样例 1 说明
该 01 字符串中有 2 2 2 个字符 1 1 1。
样例 2 说明
该 01 字符串中有 8 8 8 个字符 1 1 1。
数据规模与约定
- 对于 20 % 20\% 20% 的数据,保证输入的字符全部为 0 0 0。
- 对于 100 % 100\% 100% 的数据,输入只可能包含字符 0 0 0 和字符 1 1 1,字符串长度固定为 8 8 8。
解法1:打表
1.1.程序打表
#include<bits/stdc++.h>
using namespace std;
int a[11111112];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<=1;i++)
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
for(int l=0;l<=1;l++)
for(int m=0;m<=1;m++)
for(int n=0;n<=1;n++)
for(int o=0;o<=1;o++)
for(int p=0;p<=1;p++)
a[i*10000000+j*1000000+k*100000+l*10000+m*1000+n*100+o*10+p]=i+j+k+l+m+n+o+p;
printf("%d\n",a[n]);
return 0;
}
1.2.纯打表
#include<bits/stdc++.h>
using namespace std;
int a[11111112];
int main()
{
int n;
scanf("%d",&n);
a[0]=0;
a[1]=1;
a[10]=1;
a[11]=2;
a[100]=1;
a[101]=2;
a[110]=2;
a[111]=3;
a[1000]=1;
a[1001]=2;
a[1010]