找实习面试熟悉了一下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 1≤val≤100
输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数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’))。