笔试时间:2024年04月20日
历史笔试传送门:2023秋招笔试合集
青牛小学一年一度的六一儿童节开始了。现在牛牛们围成一圈坐在草地上,为了方便,我们把牛牛们编号为牛1,牛2,牛3,牛n。其中牛1与牛2相邻,牛2与牛3相邻,牛n和牛1相邻。为了更好的安排接下来的活动,牛老师很好奇:从这些牛中选出几只相邻的牛,总共有多少种不同的方案?我们认为两个方案不同,当且仅当两种选法选出的牛个数不同或选出的牛的编号不完全相同。
输入一个整数n,表示牛的个数。
输出一个整数n,表示方案数。
说明
对于100%的数据,保证n≥1
对于10%的数据,保证n≤5
对于30%的数据,保证n ≤100
对于60%的数据,保证n≤1000
对于100%的数据,保证n≤10^9
2
3
解释:
环为1,2可以选择(1},{2},{1.2}
4
13
解释:
环为1,2,3,4可以选择(1}, {2, {3}, {4},{1,2}, {2,3}, {3, 4}, {4, 1},{1,2,3},{2,3,4},{3,4,1} {4,1,2}{1,2,3,4}共13种情况。
模拟。观察问题,我们需要计算从n头牛中选出若干头相邻的牛的方案数。由于牛是围成一圈的,这意味着我们可以从任意一头牛开始数。
不特殊的方案:首先考虑所有的牛都不同时被选中的情况。在这种情况下,我们可以选择任意一头牛作为起点(有n种选择),然后选择从这头牛开始的任意连续数量的牛(1到n-1种选择,因为如果选择了n头,那就是特殊情况了)。因此,这部分的方案数为 (n *(n-1)。
特殊方案:所有的牛都被选中的情况。这是一个特殊的方案,因为不管从哪头牛开始数,选出的都是全部的牛。这种情况下只有1种方案。
总结方案数:将上述两种情况相加,得到的总方案数就是 n*(n-1)+1。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> int main() { int N; std::cin >> N; std::cout << N * (N - 1) + 1 << std::endl; return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); System.out.println(N * (N - 1) + 1); scanner.close(); } }
Python:[此代码未进行大量数据的测试,仅供参考]
import sys N=int(input()) print(N*(N-1)+1)
给出一个长度为n的字符串s和一个整数k,现在请你依次按照i= 1,2,.....n-k+1的顺序求出以下操作得到的字符串将字符串s的第i个字符至第i+k- 1之间的所有