这道题的题意是给你个数字n,表示你有1到n这些数字。
把它们分成两组数字,使每组数字的和 之差 最小。第一行输出它们的差,第二行的第一个数字是随便一组数字的个数,后面跟着这组数字的全部。
我的思路跟各位大佬们的思路不同,第一行的话直接判断1到n的总和是奇数还是偶数,奇数的话一定是1,偶数则为0,偶数一定能分成两半,每组的和一样。找每组数字的成员的话,我是从后往前遍历。。具体看代码吧。
#include<bits/stdc++.h>
using namespace std;
int main() {
long long n, sum, cnt, j;
while(cin >> n) {
cnt = 0;
sum = n * (n + 1) / 2;
if(sum % 2 == 0) puts("0");
else puts("1");
int tot = 0, coun = 0, res = 0, a[60000];
for(int i = n; i >= 1; i--) {
tot += i;
if(i > sum / 2)continue;
a[res++] = i;
coun++;
if(tot == sum / 2)break;
if((sum / 2 - tot) < i && (sum / 2 - tot) >= 1) {//一直遍历直到找出第一个数字。在判断一些特殊情况即可
a[res++] = sum / 2 - tot;
coun++;
break;
}
}
cout << coun;
for(int i = 0; i < res; i++) {
cout << " " << a[i];
}
puts("");
}
return 0;
}