2017蓝桥杯算式900(C++C组)
题目:算式900
小明的作业本上有道思考题:
看下面的算式:
(□□□□-□□□□)*□□=900
其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字。
注意:0不能作为某个数字的首位。
小明经过几天的努力,终于做出了答案!如下:
(5012-4987)*36=900
用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。
注意:提交的格式需要与示例严格一致;
括号及运算符号不要用中文输入法;
整个算式中不能包含空格。
注意:机器评卷,不要填写任何多余的内容,比如说明文字。
解析:读完本题后,我们大概有了自己的想法,每个人都有自己解决的办法,不必拘于一种做法,在这里,我分享一下我的解法。首先,根据题意,我们可以先计算出10到99内可以被900整除的所有正整数,然后利用双重for循环遍历1000到9999之间做出的差,并加以判断该差是否可以被900整除并且属于第一步结果所得集合中的元素,如果符合,则需判断最后一步:减数和被减数还有900除以差的商是否占满了0-9是个数字且无重复(在这里,本人亲自写了一个算法,学识尚浅,欢迎指教)。
代码:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
#define SUB 100 //10-99以内可以被900整除的数组的下标
int A1,A2,A3,A4,B1,B2,B3,B4,C1,C2; //将减数被减数和900除以差的商的千百十个位数分离后的各个数
int C[SUB] = {0}; //10-99以内可以被900整除的数组
int ABC[10]; //被分离后的各个数组成的集合(方便判断)
void c_init();
void abc_init();
bool is_right(int data); //遍历能被900整除的数以判断是否满足is_right_temp函数
bool is_right_temp(int m,int n,int data); //判断减数被减数和900除以差的商分离后的各个数字是否各不相同
int main(int argc,char** argv){
c_init();
for(int i = 0;i < 13;i++){
is_right(C[i]);
}
return 0;
}
void c_init(){
int order = 0;
for(int i = 10;i < 100;i++){
if(900 % i == 0){
C[order] = i;
order++;
}
}
}
void abc_init(){
ABC[0] = A1;
ABC[1] = A2;
ABC[2] = A3;
ABC[3] = A4;
ABC[4] = B1;
ABC[5] = B2;
ABC[6] = B3;
ABC[7] = B4;
ABC[8] = C1;
ABC[9] = C2;
}
bool is_right(int data){
ofstream fout;
fout.open("info.txt",ios::app);
string space = " ";
for(int i = 1000;i < 10000;i++){
for(int j = 1000;j < 10000;j++){
if(i - j == 900 / data){
if(is_right_temp(i,j,data)){
fout << "(" << i << space << "-" << space << j << ")" << space << "*" << space << data << space << "="<< space << "900" << "\n";
}
}
}
}
fout.close();
}
bool is_right_temp(int a,int b,int c){
int nums = 0;
bool jud = false;
while(a > 0){
if(a / 10 >= 100){
A4 = a % 10;
}else if(a / 10 >= 10){
A3 = a % 10;
}else if(a / 10 >= 1){
A2 = a % 10;
}else{
A1 = a;
}
a = a / 10;
}
while(b > 0){
if(b / 10 >= 100){
B4 = b % 10;
}else if(b / 10 >= 10){
B3 = b % 10;
}else if(b / 10 >= 1){
B2 = b % 10;
}else{
B1 = b;
}
b = b / 10;
}
while(c > 0){
if(c / 10 >= 1){
C2 = c % 10;
}else{
C1 = c;
}
c = c / 10;
}
abc_init();
for(int i = 0;i < 10;i++){
for(int j = 0;j < 10;j++){
if(i == ABC[j]){
jud = true;
}
}
if(jud){
nums++;
jud = false;
}
}
if(nums == 10){
return true;
}else{
return false;
}
}
输出结果(本题本人用到了文件流知识点,也可以使用控制台输出.)
最新文章
- bzoj1854 游戏
- laravel5.3----------调度任务以及Artisan
- 用户管理-------userManage
- Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)
- 中科院Oracle 10G 数据库系统培训视频教程(828MB )
- python导入模块时的路径疑惑
- mysql 添加[取消]timestamp的自动更新
- 老李分享:Web Services 组件 2
- bootstrapru软件官网
- 手把手编写PHP MVC框架实例教程
- RNN回归
- [APIO2014]序列分割
- mysql数据库的查询,添加,删除,还原,备份
- 【Excel】SUMIF函数的兼容性
- [硬件]SICK LMS111激光扫描仪使用
- PHP中汉字截取
- mysqldump备份时保持数据一致性
- C++中模板与泛型编程
- Inter-System Differencing between GPS and BDS for Medium-Baseline RTK Positioning-12-18
- 修改Qt源码遇到的问题
热门文章
- 组件/ 外层数据初始化时候,不应该触发 on-change 事件
- vscode style内置auto会导致eslint格式化 对不齐报错
- Rational Rose 2007破解版
- Spring Boot入门系列(八)整合定时任务Task,一秒搞定定时任务
- JAVA系列-JVM
- 洛谷1063 +区间dp(经典问题)
- 基于树莓派与YOLOv3模型的人体目标检测小车(一)
- 多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!
- 【深度学习】Neural networks(神经网络)(一)
- Vue2.0 -- 钩子函数/ 过度属性/常用指令/以及Vue-resoure发送请求