OpenJudge 题=>记

下面整理了一些我做OpenJudge遇到的一些不错的题。

1.3编程基础之算术表达式与顺序执行
13:反向输出一个三位数
总时间限制: 1000ms 内存限制: 65536kB
描述
将一个三位数反向输出。
输入
一个三位数n。
输出
反向输出n。
样例输入
100
样例输出
001

这里用Python写:

nums = input()
a = list(reversed(nums))
print(a[0] + a[1] + a[2])

1.4编程基础之逻辑表达式与条件分支
09:判断能否被3,5,7整除
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个整数,判断它能否被3,5,7整除,并输出以下信息:
1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);
2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔);
3、只能被其中一个数整除(输出这个除数);
4、不能被任何数整除,输出小写字符‘n’,不包括单引号。
输入
输入一行,包括一个整数。
输出
输出一行,按照描述要求给出整数被3,5,7整除的情况。
样例输入
105
样例输出
3 5 7

这道题如果直接用条件分支,列举出所有情况(我本来的做法),写起来代码就会很冗长,效率不高,下面改进了算法。

C:

#include<stdio.h>

int main(void)
{
    int n, flag = 0;

    scanf("%d", &n);
    if(n % 3 == 0)
    {
        printf("3 ");
        flag = 1;
    }
    if(n % 5 == 0)
    {
        printf("5 ");
        flag = 1;
    }
    if(n % 7 == 0)
    {
        printf("7");
        flag = 1;
    }
    if(flag == 0)
    {
        printf("n");
    }

    return 0;
}

这段代码也可以改写成Python:

n = int(input())
flag = 0
if(n % 3 == 0):
    print("3", end = ' ')
    flag = 1
if(n % 5 == 0):
    print("5", end = ' ')
    flag = 1
if(n % 7 == 0):
    print("7", end = ' ')
    flag = 1
if(flag == 0):
    print("n")

19:简单计算器
总时间限制: 1000ms 内存限制: 65536kB
描述
一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。

输入
输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。
输出
输出只有一行,一个整数,为运算结果。然而:
1.如果出现除数为0的情况,则输出:Divided by zero!
2.如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
样例输入
1 2 +
样例输出
3
提示
可以考虑使用if和switch结构。

C:

//下面用if-else语句完成
#include<stdio.h>

int main(void)
{
    int a, b, calc;
    char ch;

    scanf("%d %d %c", &a, &b, &ch);
    if(ch == '+')
    {
        calc = a + b;
        printf("%d", calc);
    }
    else if(ch == '-')
    {
        calc = a - b;
        printf("%d", calc);
    }
    else if(ch == '*')
    {
        calc = a * b;
        printf("%d", calc);
    }
    else if(ch == '/')
    {
        if(b == 0)
        {
            printf("Divided by zero!");
        }
        else
        {
            calc = a / b;
            printf("%d", calc);
        }
    }
    else
    {
        printf("Invalid operator!");
    }

    return 0;
}
//下面主用switch语句
#include<stdio.h>

int main(void)
{
    int a, b, calc;
    char ch;

    scanf("%d %d %c", &a, &b, &ch);
    switch (ch)
    {
    case '+':
    {
        calc = a + b;
        printf("%d", calc);
        break;
    }
    case '-':
    {
        calc = a - b;
        printf("%d", calc);
        break;
    }
    case '*':
    {
        calc = a * b;
        printf("%d", calc);
        break;
    }
    case '/':
    {
        if(b == 0)
        {
            printf("Divided by zero!");
            break;
        }
        else
        {
            calc = a / b;
            printf("%d", calc);
            break;
        }
    }
    default : printf("Invalid operator!");
    }
    
    return 0;
}
//加上goto语句
#include<stdio.h>

int main(void)
{
    int a, b, calc;
    char ch;

    scanf("%d %d %c", &a, &b, &ch);
    switch (ch)
    {
        case '+': calc = a + b; goto print;
        case '-': calc = a - b; goto print;
        case '*': calc = a * b; goto print;
        case '/':
        {
            if(b == 0)
            {
                printf("Divided by zero!");
                goto end;
            }
            else
            {
                calc = a / b;
                goto print;
            }
        }
        default: printf("Invalid operator!"); goto end;
    }

    print: printf("%d", calc);

    end: return 0;
}

Python:

data = input().split()
a = int(data[0])
b = int(data[1])
ch = data[2]
if(ch == '+'):
    print(a + b)
elif(ch == '-'):
    print(a - b)
elif(ch == '*'):
    print(a * b)
elif(ch == '/'):
    if(b == 0):
        print("Divided by zero!")
    else:
        print(int(a / b)) #这里不能用地板除,因为地板除是向下取整
else:
    print("Invalid operator!")
发布了8 篇原创文章 · 获赞 7 · 访问量 350

猜你喜欢

转载自blog.csdn.net/weixin_45824303/article/details/105179010