下面整理了一些我做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!")