| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
水题一个,但是要注意几个问题!首先是考虑写成AkB + AB的形式,其中k为去掉的数码,那么
2*B+(11*A+k)*10^b=N
对b煤局就行了,其中B小于10^b。但是有几个坑的地方
1,如果B是个0位数(即Ak+A)需要单独讨论
2,当B不是0位数时,N需要是偶数,而且一定要判断mod11是否是10,是10的话直接ignore因为k必须小于10
3,输出记得输出a和b的位数差个0,尤其是b=0需要特殊处理
4,记得排除掉结果中重复的数!因为对不同的去掉数位煤局可能得到同样的结果!!比如1222=1111+111,去掉哪一位都是一回事!我就是在这里WA了一次qaq
附代妈
#include <iostream>
#include <vector>
using namespace std;
int powOf10[10] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
int ws(int n){
for(int i = 1; i <= 9; i++){
if(powOf10[i] > n) return i;
}
return 10;
}
int main() {
int N;
vector<int> res;
cin >> N;
if(N%11 != 10){
int A = N/11;
res.push_back(N-A);
}
if(N%2 == 0){
for(int b = 1; powOf10[b] <= N; b++){
int B = (N%powOf10[b])/2;
int A11_K = (N-2*B)/powOf10[b];
if(A11_K%11 != 10){
int A = A11_K / 11;
int k = A11_K % 11;
res.push_back((10*A+k)*powOf10[b] + B);
}
if(N/powOf10[b] == 1) break;
B = (powOf10[b] + N%powOf10[b])/2;
A11_K = (N-2*B)/powOf10[b];
if(A11_K%11 != 10){
int A = A11_K / 11;
int k = A11_K % 11;
res.push_back((10*A+k)*powOf10[b] + B);
}
}
}
int gs = res.size();
for(int i = 1; i < gs; i++){
for(int j = i; j > 0; j--){
if(res[j] > res[j-1]) break;
int temp = res[j];
res[j] = res[j-1];
res[j-1] = temp;
}
}
int gui = 0;
int cnt = 0;
for(int i = 0; i < gs; i++){
if(res[i] == gui) continue;
gui = res[i];
cnt++;
}
cout << cnt << endl;
int shou = 0;
for(int i = 0; i < gs; i++){
if(shou == res[i]) continue;
shou = res[i];
int wsA = ws(res[i]), wsB = ws(N - res[i]);
cout << res[i] << " + ";
for(int j = 0; j < wsA-wsB-1; j++) cout << 0;
cout << N-res[i] << " = " << N << endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator