swjtu 1962 A+B

题目链接:http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1962

问题思路:考察编程基础的问题,涉及到字符串转为数字的问题。

代码如下:

#include <stdio.h>
#include <string.h>

#define MAX_N 1000

int num_a[MAX_N], num_b[MAX_N];
int digit_a, digit_b;
char character[5][MAX_N];
char example[5][40] =
{
    "+-+  ++-++-++ ++-++-++-++-++-+",
    "| |  |  |  || ||  |    || || |",
    "+ +  ++-++-++-++-++-+  ++-++-+",
    "| |  ||    |  |  || |  || |  |",
    "+-+  ++-++-+  ++-++-+  ++-++-+",
};

int CharToNum(int char_i, int exap_i)
{
    int c_i = char_i;
    int e_j = exap_i;

    if (character[0][c_i] == ‘ ‘ &&
        character[0][c_i + 1] == ‘ ‘ &&
        character[0][c_i + 2] == ‘ ‘)
        return -1;

    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 3; ++j)
        {
            if (character[i][c_i + j] !=
                example[i][e_j + j])
                return 0;
        }
    }

    return 1;
}

void output(int ans)
{
    int digit = 0;
    int num[MAX_N];
    int divide = ans;
    int rest = 0;

    memset(num, 0, sizeof(num));
    for (int i = 0; divide != 0 || rest != 0; ++i)
    {
        num[i] = divide % 10;
        divide /= 10;
        digit = i;
    }

    for (int i = 0; i < 5; ++i)
    {
        for (int j = digit; j >= 0; --j)
        {
            int num_line = num[j] * 3;

            for (int k = 0; k < 3; ++k)
                printf("%c", example[i][num_line + k]);

            if (j == 0)
                printf("\n");
            else
                printf(" ");
        }
    }
}

int main()
{
    int len = 0;
    int flag = false;

    for (int i = 0; i < 5; ++i)
        gets(character[i]);

    len = strlen(character[0]);

    for (int i = 0; i < len; i += 4)
    {
        for (int j = 0; j < 30; j += 3)
        {
            int result = CharToNum(i, j);

            if (result == -1)
            {
                flag = true;
                break;
            }

            if (!flag && result != 0)
            {
                num_a[digit_a++] = j / 3;
                break;
            }
            else
            if (flag && result != 0 && result != -1)
            {
                num_b[digit_b++] = j / 3;
                break;
            }
        }
    }

    int a = 0, b = 0;

    for (int i = 0; i < digit_a; ++i)
        a = a * 10 + num_a[i];
    for (int i = 0; i < digit_b; ++i)
        b = b * 10 + num_b[i];

    output(a + b);

    return 0;
}
时间: 2024-10-21 16:27:15

swjtu 1962 A+B的相关文章

swjtu 2213 A Game About Cards(模拟题)

题目链接:http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=2213 思路分析:该问题与约瑟夫问题相似:每次将前n张牌放到队列的最后,可以将整个队列看做一个环,每次向前移动n步,则下一张牌的号码即被编号为n, 并在该环中除去该牌,在继续前行n+1步,如此循环,直到最后一张牌被编号. 代码如下: #include <iostream> using namespace std; const int MAX_N = 20; int

广搜 迷宫(zznu 1962)

http://acm.zznu.edu.cn/problem.php?id=1962 题目描述 在很多 RPG (Role-playing Games) 游戏中,迷宫往往是非常复杂的游戏环节.通常来说,我们在走迷宫的时候都需要花非常多的时间来尝试不同的路径.但如果有了算法和计算机的帮助,我们能不能有更快的方式来解决这个问题?我们可以进行一些尝试. 现在我们有一个 N 行 M 列的迷宫.迷宫的每个格子如果是空地则可以站人,如果是障碍则不行.在一个格子上,我们可以一步移动到它相邻的 8 个空地上,但

codevs 1962 马棚问题--序列型DP

1962 马棚问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束的时候,必须带所有的马返回马棚,小明有K个马棚.他把他的马排成一排然后跟随它走向马棚,因为他们非常疲劳,小明不想让他的马做过多的移动.因此他想了一个办法:将马按照顺序放在马棚中,后面的马放的马棚的序号不会大于前面的马放的马棚的序号.而且,他不想他的K个马棚中任何一个空置,也不想任何一匹马在外面.已知共有黑

SWJTU 2184迷宫

DongGua: Save our SWJTU! Time Limit:2000MS  Memory Limit:65536KTotal Submit:46 Accepted:22 Description One night ,Desgard_Duan was caught by an alien named “DG”when he was sleeping soundly. “Now,you are in a extremely complicated maze, if you can’t e

poj 1962 Corporative Network

题目链接:http://poj.org/problem?id=1962 思路:每个集合中用根节点标记这个集合,每个点到根节点的距离. code: <span style="font-size:18px;">#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<set&

cogs 1962. [HAOI2015]树上染色

★★☆   输入文件:haoi2015_t1.in   输出文件:haoi2015_t1.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益.问收益最大值是多少. [输入格式] 第一行两个整数N,K. 接下来N-1行每行三个正整数fr,to,dis,表示该树中存

FOJ 1962 新击鼓传花游戏 线段树

维护一个sum数组,有点划分树的思想,写过划分树的应该能看出来 #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<vector> #include<stack> #include<cmath> #include<queue> #include<map> using namespace

SWJTU 2212 简单的GCD (莫比乌斯反演)

简单的GCD Time Limit:1000MS  Memory Limit:32768KTotal Submit:12 Accepted:4 Description 问题很简单(洁),有 T 个询问,每次询问 a,b,d ,问有多少对 (x,y) 满足 1 ≤ x ≤ a, 1 ≤ y ≤ b ,且 Gcd(x,y) = d . 注意这里(x=1, y=2)与(x=2, y=1)认为是一对. Input 输入第一行为T,表示测试数据组数. 下面的T行,每行包括三个整数a,b,d. 1 ≤ d

[洛谷1962]斐波那契数列

思路: 常见算法时矩阵快速幂,但事实上这题可以不需要矩阵快速幂. 设斐波那契数列为$f$,观察规律可以发现: 当$n$为偶数时,$f_n=(f_{n-1}\times 2+f_n)\times f_n$: 当$m$为奇数时,$f_n=f_{n+1}^2+f_n^2$. 这样只要用一个map记录已经计算过的Fibonacci数,递归求得答案即可. 再用一个hash_map跑得和标算一样快(0ms),而且内存更小. 1 #include<cstdio> 2 #include<ext/hash