数码管问题(c++实现)
2015-07-31 22:49
162 查看
描述:液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即7有3笔,8有7笔等。对于十个数字一种排列,要做到
两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减。比如 7→3是允许的,7→2不允许。任意输入一组数,判断是否符合上述规则。
输入:每行输入一个0~9的排列,数字之间用空格分隔,以-1作为输入结束
输出:输入YES或NO
input:
两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减。比如 7→3是允许的,7→2不允许。任意输入一组数,判断是否符合上述规则。
输入:每行输入一个0~9的排列,数字之间用空格分隔,以-1作为输入结束
输出:输入YES或NO
input:
4107395682 3 5 1 6 2 7 9 0 4 8 0 output:
YES NO 分析:有这样一种思路,将每一笔表上顺序,这样每个数字就可以表示成一个字符串,如1为“35”,然后判断相邻两个是否符合规则可以用较段数字的字符串是否为较大字符串的子集来判断,如果是则符合
#include<iostream> #include<string> using namespace std; //判断相邻两个是否可相互转化 int s(string max, string min) { int n = 0; for (int i=0; i < min.size(); i++) { for (int j = 0; j < max.size(); j++) { if (min[i] == max[j]) n++; } } if (n == min.size()) return 1; else return 0; } //判断函数 int cal(int a[]) { int k; string b[10] = { "123567", "35", "23467", "23456", "1345", "12456", "124567", "235", "1234567", "123456" };//将数码管中7话用数字1-7标记,用字符串存每个数字 //逐个比较a中相邻两个 for (int i = 0; i < 9; i++) { if (b[a[i]].size()>b[a[i + 1]].size()) k = s(b[a[i]], b[a[i+1]]); else k = s(b[a[i+1]], b[a[i]]); if (!k) return 0; } return 1; } int main() { int a[10]; while ((cin >> a[0]) && (a[0] != -1)) { for (int i = 1; i < 10; i++) cin >> a[i]; if (cal(a)) cout << "Yes" << endl; else cout << "No" << endl; } system("pause"); return 0; }
相关文章推荐
- iOS开发轻松搞定C语言面试—— 算法
- 单片机延时C语言程序
- 指针使用注意事项
- 我的C语言入门到精通之路 day04
- C++读dat文件
- C++ 智能指针详解
- C++ string 类的 find 方法实例详解
- <<深度探索c++对象模型>>第一章读书笔记
- C++读取注册表
- 黑马程序员-C语言printf和scanf函数中格式控制符使用小结
- 黑马程序员-C语言数组的使用注意事项
- 黑马程序员-C语言指针用法
- 黑马程序员-C语言const关键字的使用小结
- 黑马程序员-C语言中内存动态分配函数的使用方法及注意事项
- 黑马程序员-C语言结构体使用的相关细节
- 黑马程序员-C语言中static、extern、typedef、enum使用的注意事项
- 黑马程序员-C语言中有关宏的一些注意事项
- 《深度探索C++对象模型》读书笔记
- 黑马程序员-C语言条件编译的使用
- C语言深度解剖——读书笔记-1、关键字