华为机试题第三题
2015-09-13 11:18
211 查看
/*
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21
*/
//way 1:
这个方法是转载的,可以看懂可以运行,暴力解法,如果谁有更好 的方法,可以讨论下,欢迎拍砖!~
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21
*/
//way 1:
#include<stdio.h> #include <iostream> using namespace std; #include <string> #include<algorithm> #define MaxNumer 1000 int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //最大 int sum = 0; int create_util(int start, int end) { int sum_; sum_ = 0; while (start <= end) { sum_ = sum_ * 10 + a[start++]; } return sum_; } void create(int start,const int end, int result)//开始处理 { int k, temp; if (start>end&&result != 0)//当到达最后一个且不为0,结束 { return; } if (result == 0 && start>end) sum++;//全局的统计数加一 for (k = start; k <= end; k++)//从start开始以后都是进行同样的操作 { temp = create_util(start, k);//计算对应的值 create(k + 1, end, result - temp);//- create(k + 1, end, result + temp);//+ } } int main() { int X; while (scanf("%d", &X) != EOF) { sum = 0; for (int i = 0; i<9; i++)//考虑到第一个必是正数,单独考虑 { int temp = create_util(0, i);//计算其对应的十进制值 create(i + 1, 8, X - temp);//开始对{1,2,3,4,5,6,7,8,9}后面的值进行处理 } cout << sum << endl; } system("PAUSE"); return 0; }
这个方法是转载的,可以看懂可以运行,暴力解法,如果谁有更好 的方法,可以讨论下,欢迎拍砖!~
相关文章推荐
- wpf之数据触发器DataTrigger
- android EditText 设置密码锁源码
- 一篇很详细的Freemarker讲解(小demo、Servlet中运用、freemarker语言的各种)
- 四层和七层负载均衡
- Github for Windows使用介绍
- java设计模式系列--外观模式
- JavaScript权威指南_157_第17章_事件处理_17.0-概述
- 《他的国》读后感
- iOS属性修饰符
- 安卓开发问题及其解决
- 的问题上,下数
- 【转载】2015年8月编程语言排行榜:Java遥遥领先
- php的时间输出格式
- ENOB测试程序
- Android Fragment
- Android4.4的zygote进程(上)
- 关于MPAndroidChart柱状图左右滑动
- 【Direct3D】Mesh part
- 软件测试管理知识点总结 (三)
- 其它