


题目大意:
输入两个整数n和k,要求一个p数组由数字1-n组成,并且存在一个长度为i的连续数组,i属于1-n,这个数组的和对n取模为k,如果不能,输出-1
题目思路:
首先判断1-n的和mod n是否等于k,如果不等于,说明无法构造,输出-1
否则:
1.n为奇数,那么k=0,可以构造成 n n-1 1 n-2 2
2.n为偶数,那么数组总和为n*(n+1)/2
1+(n-1)=n,2+(n-2)=n……所以有解k=n/2,n k n-1 1 n-2 2…
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
if((n*(n+1)/2)%n!=k)
cout<<-1;
else
{
if(k==0)
{
for(int i=1;i<=n/2;i++)
cout<<i<<" "<<n-i<<" ";
cout<<n;
}
else if(k==n/2)
{
cout<<n<<" "<<k;
for(int i=1;i<n/2;i++)
cout<<" "<<i<<" "<<n-i;
}
}
return 0;
}
本文探讨了一道编程题目,要求输入两个整数n和k,构造一个由1到n组成的数组p,使得存在一个长度为i(1≤i≤n)的连续子数组,其元素之和对n取模等于k。文章详细解析了如何判断解的存在性及构造方法。

360

被折叠的 条评论
为什么被折叠?



