程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 數碼管問題(c++實現),數碼

數碼管問題(c++實現),數碼

編輯:C++入門知識

數碼管問題(c++實現),數碼


    描述:液晶數碼管用七筆阿拉數字表示的十個數字,把橫和豎的一 個短劃都稱為一筆,即7有3筆,8有7筆等。對於十個數字一種排列,要做到
 兩相鄰數字都可以由另一個數字加上幾筆或減去幾筆組成,但不能又加又減。比如 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”,然後判斷相鄰兩個是否符合規則可以用較段數字的字符串是否為較大字符串的子集來判斷,如果是則符合

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 //判斷相鄰兩個是否可相互轉化
 6 int s(string max, string min)
 7 {
 8     int n = 0;
 9     for (int i=0; i < min.size(); i++)
10     {
11         for (int j = 0; j < max.size(); j++)
12         {
13             if (min[i] == max[j])
14                 n++;
15         }
16     }
17     if (n == min.size())
18         return 1;
19     else
20         return 0;
21 }
22 
23 //判斷函數
24 int cal(int a[])
25 {
26     int k;
27     string b[10] = { "123567", "35", "23467", "23456", "1345", "12456", "124567", "235", "1234567", "123456" };//將數碼管中7話用數字1-7標記,用字符串存每個數字
28     //逐個比較a中相鄰兩個
29     for (int i = 0; i < 9; i++)
30     {
31         
32         if (b[a[i]].size()>b[a[i + 1]].size())
33             k = s(b[a[i]], b[a[i+1]]);
34         else
35             k = s(b[a[i+1]], b[a[i]]);
36         if (!k)
37             return 0;
38     }
39     return 1;
40 }
41 
42 int main()
43 {
44     int a[10];
45     while ((cin >> a[0]) && (a[0] != -1))
46     {
47         for (int i = 1; i < 10; i++)
48             cin >> a[i];
49         if (cal(a))
50             cout << "Yes" << endl;
51         else
52             cout << "No" << endl;
53     }
54     system("pause");
55     return 0;
56 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved