P7060 [NWRRC2014]Alarm Clock题解

· · 题解

本蒟蒻的第一篇题解,大佬勿喷!

题目传送门:P7060

题目大意

输入一个火柴棒的数量,用这些火柴棒组成一个合法的电子表时间。

如果无法组成,输出Impossible。

思路

第一步:我们可以先把 09 每个数字在电子表中所用的段数存到数组里,计算可知,段数分别为 : 6 , 2 , 5 , 5 , 4 , 5 , 6 , 3 , 7 , 6 第二步:由于总共有 23 \times 60 = 1380 种组成时间的方式。所以,可以用双层循环枚举。如果枚举出来的时间的段数等于输入的段数,就得到了答案。

code:

#include <iostream>
#include <string>
using namespace std;
int num[10] = {6,2,5,5,4,5,6,3,7,6}; //定义num数组,记录0-9每点的段数
int n; //n是输入的段数
int main() 
{
    cin >> n; //输入n
    int count; //定义计数器num,记录段数
    for(int i = 0; i < 23; ++i) { //开始遍历
        for(int j = 0; j <= 59; ++j) {
            count = 0; //记得清0
            count += num[i % 10]; //统计小时的个位数
            count += num[i / 10]; //统计小时的十位数
            count += num[j % 10]; //统计分钟的个位数
            count += num[j / 10]; //统计分钟的十位数
            if(count == n) {
            //cout << i << '\n' << j;
                printf("%02d:%02d",i,j);
                return 0;
            }
        }
    }
    cout << "Impossible" << '\n'; //如果没有结束,输出Impossible

    return 0;
}

求通过!