#低级进阶#无聊小题集_1
记一下因学校布置而做的小题吧。这学期没怎么做题,暴露了咸鱼的本性。希望接下来多刷点吧。
求 A/B 高精度值(ab)
【问题描述】
计算 A/B 的精确值,设 A,B 是以一般整数输入,计算结果精确到小数后 20 位(若不足 20 位,末尾不
用补 0)。
【输入样例 1】
4 3
【输出样例 1】
4/3=1.33333333333333333333
【输入样例 2】
6 5
【输出样例 2】
6/5=1.2
def main():
a, b = map(int, input().strip().split())
ya=a
c=a//b
d=[]
a=(a%b)*10
for i in range(1,21):
d.append(a//b)
a=(a%b)*10
for i in range(len(d)-1,0,-1):
if(d[i]==0):
d.pop(i)
else:
break
print(ya,end='')
print('/',end='')
print(b,end='')
print('=',end='')
print(c,end='')
print('.',end='')
for i in d:
print(i,end='')
main()
有没有更简单的方法?python格式输出好烦哦。一开始做这题的时候import了decimal,结果发现没法实现(可能因为我菜和懒+想当然吧)
双色汉诺塔
题目描述
设A、B、C是3 个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A 上的这一叠圆盘移到塔座B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则(1):每次只能移动1 个圆盘; 规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则(3):任何时刻都不允许将同色圆盘叠在一起; 规则(4):在满足移动规则(1)-(3)的前提下,可将圆盘移至A,B,C 中任一塔座上。
试设计一个算法,用最少的移动次数将塔座A 上的n个圆盘移到塔座B 上,并仍按同样顺序叠置。
输入
只一行是给定的正整数n。
输出
将计算出的最优移动方案输出。文件的每一行由一个正整数k和2个字符c1和c2组成,表示将第k个圆盘从塔座c1移到塔座c2上。
样例输入
3
样例输出
1 A B 2 A C 1 B C 3 A B 1 C A 2 C B 1 A B
def haha(n,a,b,c,j):
if(n==1):
print(j,a,b)
else:
j=n-1
haha(n-1,a,c,b,j)
j=n
haha(1,a,b,c,j)
j=n-1
haha(n-1,c,b,a,j)
def main():
n=int(input())
j=1
haha(n,'A','B','C',j)
main()
我不太明白为什么要是双色,一开始被唬住了…并且由于本题,本菜鸟知道了递归深度这玩意儿……
放大
Problem Description
Taotao is glad to see that lots of students have registered for today's algorithm competition. Thus he wants to pull a banner on the wall. But Taotao is so stupid that he doesn't even know how to enlarge words to fit the size of banner. So Taotao gives you a slogan template and asked you to enlarge them in k times.
Input
There are multiple test cases.
For each test case, first line contains three numbers n, m, k (1<=n, m<=100,1<=k<=10).
The next n lines each contain m visible characters.Output
For each test case, you should output kn lines each contain km visible characters to represent the expanded slogan.
Sample Input
3 3 2 .*. .*. .*.
Sample Output
..**.. ..**.. ..**.. ..**.. ..**.. ..**..
#include<stdio.h>
main(){
int n,m,k,i,j,ha=0,ha2;
char a[1000][100],b[1000][1000],de;
while(scanf("%d%d%d",&n,&m,&k)!=EOF) {
for(i=0;i<n;i++)
for(j=0;j<m;j++){
scanf("%c",&de);
if(de=='
')
j--;
else
a[i][j]=de;
}
for(j=0;j<n;j++)
for(ha2=0;ha2<k;ha2++)
for(ha=0;ha<m;ha++)
for(i=0;i<k;i++) b[j*k+ha2][i+ha*k]=a[j][ha];
for(i=0;i<k*n;i++){
for(j=0;j<k*m;j++) printf("%c",b[i][j]);
printf("
");
}
}
}
-没啥好说的,最容易看懂的题目……我竟然还搞了个五重循环