zoukankan      html  css  js  c++  java
  • [算法竞赛入门]竖式问题

    竖式问题。找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,
    所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有
    竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出
    (为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数
    点)。
    样例输入:
    2357
    样例输出:
    <1>
    ..775
    X..33
    -----
    .2325
    2325.
    -----
    25575
    The number of solutions = 1

    【解析】此题目主要有几个需要注意的地方:

    (1)输出格式的问题

    (2)使用字符串处理是否在集合内的问题

    (3)sprintf函数strchr函数

    【一种实现方法】

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    int main(){
        char input[20], buf[99];
        int abc, de, s1, s2, s;
        memset(input, 0x00, sizeof(input));
    
        while(cin >> input){
            int cnt = 0;
            for(int i = 111; i <= 999; i++){
                for(int j = 11; j <= 99; j++){
                    abc = i;
                    de = j;
                    s1 = (de % 10) * abc;
                    s2 = (de / 10) * abc;
                    s = s1 + s2 * 10;
                    sprintf(buf, "%d%d%d%d%d", abc, de, s1, s2, s);
                    bool flag = true;
                    for(int i = 0; i < strlen(buf); i++) {
                        if(NULL == strchr(input, buf[i])) {
                            flag = false;
                        }
                    }
                    if(true == flag){
                        cout << "<" << ++cnt << ">" << endl;
                        printf("%5d
    X%4d
    -----
    %5d
    %4d 
    -----
    %5d
    ", abc, de, s1, s2, s);
                    }
                }
            }
            cout << "The number of solutions = " << cnt << endl;
        }
        return 0;
    }

    注:原创博客,转载请注明。

  • 相关阅读:
    export环境变量 & bash shell使用命令和环境变量
    crontab定时任务
    sh脚本
    Linux的用户及权限相关
    HTTP基础
    群晖Synology
    Cntlm
    oracle存储过程
    ORACLE 增加两列字段
    excel 公式 insert 语句
  • 原文地址:https://www.cnblogs.com/Vivianwang/p/6434652.html
Copyright © 2011-2022 走看看