• [Swust OJ 179]--火柴棍(找规律)


    题目链接:http://acm.swust.edu.cn/problem/0179/

    Time limit(ms): 1000      Memory limit(kb): 65535
     
    Description

    火柴棍可以拼成10进制的数字,如图所示:


    现在,gogo给你个n个火柴棍,要求你输出最小能拼成的数字和最大能拼成的数字。

     
    Input

    第一行输入一个整数T:T组测试数据(T<100)

    每行输入一个n (2 ≤ n ≤ 100): 表示你有的火柴棍数。

     

    Output

    最小能拼成的数字和最大能拼成的数字, 用一个空格分开. 没有前导0.

     
     
    Sample Input
    4
    3
    6
    7
    15
    Sample Output
    7 7
    6 111
    8 711
    108 7111111

     
     

    解题思路:最大值就是凑成7或1,偶数根全为1,奇数根火柴拼一个7,至于最小值,我是找的规律前17根火柴直接找出来的(如下表)

         发现18根火柴得到最小208,19根288,20根688,满足x[i]=x[i-7]*10+8,提交了一下果然过了Orz~~~

    0 1  2  3  4  5  6  7   8   9 10 11 12 13 14 15 16 17
     0  0  1  7  4  2  6  8 10 18 22 20 28 68 88 108 188 200

    代码如下:

     1 #include <iostream>
     2 using namespace std;
     3 long long a[105] = { 0, 0, 1, 7, 4, 2, 6, 8, 10, 18, 22, 20, 28, 68, 88, 108, 188, 200 };
     4 void init(){
     5     for (int i = 18; i <= 105; ++i){
     6         a[i] = a[i - 7] * 10 + 8;
     7     }
     8 }
     9 int main(){
    10     int t, n;
    11     cin >> t;
    12     init();//没有加这一句,将答案算出,贡献一次wa
    13     while (t--)
    14     {
    15         cin >> n;
    16         cout << a[n] << ' ';
    17         while (n){
    18             if (n & 1){
    19                 cout << 7;
    20                 n -= 3;
    21             }
    22             else{
    23                 cout << 1;
    24                 n -= 2;
    25             }
    26         }
    27         cout << endl;
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    201. Bitwise AND of Numbers Range
    200.Number of Islands
    199. Binary Tree Right Side View
    198. House Robber
    191. Number of 1 Bits
    190. Reverse Bits
    odoo pivot filed字段设置
    postgres 实现查找所有的子记录,child_of
    postgres 查询返回记录集的函数
    python GUI编程/窗口编程之easygui
  • 原文地址:https://www.cnblogs.com/zyxStar/p/4581926.html
Copyright © 2020-2023  润新知