题解:P1149 [NOIP 2008 提高组] 火柴棒等式
King_and_Grey · · 题解
P1149 [NOIP 2008 提高组] 火柴棒等式 题解
题目简述
一共有
思路讲解
刚刚看到这道题,毫不犹豫地打气暴力枚举,毕竟,暴力出奇迹吗。
首先,先把
暴力代码如下:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e4;
const int num[] = {0,6,2,5,5,4,5,6,3,7,6};
int n,ans;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n;
for(int i = 1;i <= 10;i++){
for(int j = 1;j <= 10;j++){
for(int k = 1;k <= 10;k++){
if(i + j == k && num[i] + num[j] + num[k] + 4 == n && i != j){
ans++;
}
}
}
}
cout << ans << endl;
return 0;
}
20 分提交记录。
这是为什么呢。很简单,这个操作只能进行
注意点:
- 第
12 行记得j 一定要大于0 . - 第
16 和17 两行i 和j 只能循环到1000 ,不然报错。 - 第四行,我一不小心在
6 之前 加了个0 。#include <bits/stdc++.h> using namespace std; const int maxn = 2000; const int num[] = {6,2,5,5,4,5,6,3,7,6}; int n,ans,a[maxn + 5]; signed main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin >> n; a[0] = 6; //数字 0 有 6 个火柴 for (int i = 1;i <= 2000;i++){ for (int j = i;j;j /= 10){ //从最高位开始,一个数位一个数位地加上火柴数 a[i] += num[j % 10]; } } for (int i = 0;i <= 1000;i++){ for (int j = 0;j <= 1000;j++){ if (a[i] + a[j] + a[i + j] + 4 == n){ //a[i] 就是第一个数,a[j] 就是第二个数。 ans++; //a[i + j]就是第三个数。加上的 4 就是 + 和 =。 } } } cout << ans << endl; return 0; }提交记录。
感谢观看,求赞。