ACM模式输入输出python3

找实习面试熟悉了一下ACM模式,找了几个例子练练手感。

字符串输入

赛码网练习 字符串

回文串(单行输入)

给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”,”bob”,”testset”是回文串,”alice”,”time”都不是回文串。

样例输入

coco

样例输出

Yes

s = input()作为字符串输入

s = input()
for i in range(len(s)):
    p=s[:i]+s[i+1:]
    if p==p[::-1]:
        t=True
        break
    else:
        t=False
if t:
    print('Yes')
else:
    print('No')
最大字符串(两行输入)

Jack正在查询他昨天打的AtForces在线比赛的rank,他发现当两位选手排名相同的时候,id字典序小的会排在前面,他有个想法,往id里插入一个字母c,能使得他的id能够尽量往前排。

样例输入

jackisnumberone
k

样例输出

jackiksnumberone

a = input()
key = input()
index = len(a)

for i in range(len(a)):
    if a[i] > key:
        index = i
        break
    
str = a[:index] + key + a[index:]
print(str)
%82

s = input()
key = input()
ans = list(s) + ['']
index = len(ans)
for i in range(len(s)):
    if ans[i] > key:
        index = i
        break
for i in range(len(s),index,-1):
    ans[i] = ans[i-1]
ans[index] = key

print(''.join(ans))

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
void makeSmallest(char str[], int size, char key)
{
    int index = size;
    for (int i = 0; i < size; i++)
    {
        if (key < str[i]) {
            index = i;
            break;
        }
            
    }
    for (int i = size; i > index; i -- )
        str[i] = str[i - 1];
    str[index] = key;
 
    return ;
}
 
int main()
{
    int size = 0;
    char username[1002], key[2];
    memset(key, '\0', sizeof(key));
    memset(username, '\0', sizeof(username));
    scanf("%s", username);
    scanf("%s", key);
 
    size = strlen(username);
    makeSmallest(username, size, key[0]);
    printf("%s", username);
 
    return 0;
}
%100

数字输入

赛码网练习 0 1串

0 1串的魔法(多行输入,并未指定输入行数)

给一个01的字符串,定义答案=该串中最长的连续1的长度,现在你有至多K次机会,每次机会可以将串中的某个0改成1,现在问最大的可能答案.

输入描述

输入第一行两个整数N,K,表示字符串长度和机会次数

第二行输入N个整数,表示该字符串的元素

1 <= N <= 3*10^5 , 0 <= K <= N

输出描述

输出仅一行,表示答案

样例输入

10 2
1 0 0 1 0 1 0 1 0 1

样例输出

5

n,k = list(map(int,input().split()))
nums = list(map(int,input().split()))
left, right = 0, 0
res = 0

while right < n:
    if nums[right] == 1:
        right += 1
    elif k > 0:
        k -= 1
        right += 1 #寻找包含k个0的最大区间
    else:
        res = max(res,right - left)
        while left < right and nums[left] == 1: #找到区间后左指针去掉一个零,右指针找一个零补上,保证内部包含k个零
            left += 1
        right += 1
        left += 1
res = max(res, right - left)
print(res)

上台阶(多行输入,第一个数指定了输入数据的个数;多行输出)

有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?

注:规定从一级到一级有0种走法。

输入描述

输入数据首先包含一个整数 n ( 1 < = n < = 100 ) n(1<=n<=100) n(1<=n<=100),表示测试实例的个数,然后是 n n n行数据,每行包含一个整数 m m m ( 1 < = m < = 40 ) (1<=m<=40) (1<=m<=40), 表示楼梯的级数。

输出描述

对于每个测试实例,请输出不同走法的数量。

样例输入

2
2
3

样例输出

1
2

n = int(input())指定输出个数

n = int(input())
m_list = []
for i in range(n):
    m_list.append(int(input()))

def solve(n):
    if n == 1:return 0
    if n == 2:return 1
    a = 1
    b = 2
    tmp = 0
    for i in range(3,n):
        tmp = b
        b = a + b
        a = tmp
    return b

for i in m_list:
    print(solve(i)) #多行输出

牛客竞赛 A+B(4)(多组数组输入,并指定结束输入判断条件)

计算一系列数的和

链接:https://ac.nowcoder.com/acm/contest/5657/D?&headNav=acm

数据范围:数据组数满足 $ 1 \le t \le 100 $,每组数据中整数个数满足$1 \le n \le 100 $,每组数据中的值满足 1 ≤ v a l ≤ 100 1 \le val \le 100 1val100

输入描述:

输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。

输出描述:

每组数据输出求和的结果

示例1

输入

4 1 2 3 4
5 1 2 3 4 5
0

输出

10
15

while True:
    nums = list(map(int,input().split()))
    if nums[0] != 0:
        print(sum(nums[1:]))
    else:
        break

赛码网 读取未给出行列数的矩阵

多组数组输入,未指定结束输入判断条件

输入描述

对于一个n*m的矩阵,输入有n行,每行是m个以空格分隔的数字。

输出描述

n*m矩阵的转置矩阵。输出m行,每行是n个空格分隔的数据。

样例输入

1 2 3
4 5 6

样例输出

1 4
2 5
3 6

matrix = []
while True:
    s = input() 
    if len(s):
        matrix.append(list(map(int,s.split())))
    else:
        break
m = len(matrix)
n = len(matrix[0])

res = [[0]*m for i in range(n)]

for i in range(n):
    for j in range(m):
        res[i][j] = matrix[j][i]

for i in res:
    print(' '.join(list(map(str,i))))

或者

matrix = []
s = input()
while s:
    matrix.append(list(map(int,s.split())))
    s = input() 
    
m = len(matrix)
n = len(matrix[0])

for i in range(n):
    for j in range(m):
        if i < m-1:
            print(str(matrix[j][i])+" ",end="")    
        else:
            print(str(matrix[j][i]))
    print()

或者

endstr = ""
st = []
 
# 多行输入时,要使用迭代器进行每行遍历,并指定结束方式
# 使用map(映射)将以空格分割的字符串强转为整形,并保存在列表当中
 
for line in iter(input, endstr): 
    li = list(map(int, line.split())) 
    st.append(li)
 
# print()中的end可以指定结束方式,默认换行结束,则下一次print打印在下一行

for i in range(len(st[0])):
    for j in range(len(st)):
        if i < len(st)-1:
            print(str(st[j][i])+" ",end="")    
        else:
            print(str(st[j][i]))
    print() #换行

end=‘’ #不换行

end=’ ’ #空格不换行

end=‘\n’ #换行

print()输出语句中如果没有end=‘’,则会自动换行(默认为print(***,end=‘\n’))。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值