输出描述:
代码如下,菜鸟一枚,欢迎批评指正:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//维护一个count数组,存放每一组输出元素的个数
//由于count[i]里存放的是第i组序列所输出的数的个数,所以遍历count的每一个元素,
//就能找到第i+1组序列需要输出的数的个数所在count数组中的位置,而根据count的下标
//就能确定那一组输出的值,就是第i+1组需要输出的元素个数
//不断地递增计数cnt,直到达到n退出
int main()
{
int n;
int m;
int x;
int i;
int j;
int k;
int num = 0;
int cnt = 0;
vector<int> count;//维护一个数组,存放每一组输出的元素的个数
vector<int> vm;
while (cin >> n >> m) {
vector<int>().swap(vm);
if (n > 0 && n < 10000 && m > 1 && m < 1000) {
for (i = 0;i < m;++i) {//输入用于生成序列的数,放在数组vm内
cin >> x;
if (x > 0 && x < 1000) {
if (i > 0) {
if ((x != vm[i - 1]) && (i != m - 1))
vm.push_back(x);
else if ((i == m - 1) && x != vm[0]) {
vm.push_back(x);
}
}
else if (i == 0)
vm.push_back(x);
}
}
vector<int>().swap(count);//清空维护的存放每一组输出几个数的数组
while (n) {//一直循环输出,直到达到要求输出的项数n才退出
if (count.size() == 0) {
for (j = vm[0];j > 0;--j) {
cout << vm[0] << endl;//输出vm[0]的值
cnt++;
if (cnt == n) {
cnt = 0;
n = 0;
break;
}
}
count.push_back(vm[count.size()]);//当输出的是序列第一组时,count[0]里存放vm[0]的值
}
else if (count.size() == 1 && vm[0] == 1) {
int a;
for (a = 0;a < vm[1];++a) {
cout << vm[1] << endl;
cnt++;
if (cnt == n) {
cnt = 0;
n = 0;
break;
}
}
count.push_back(vm[1]);//当vm[0]是1的时候,count[1]存放的是vm[1]
}
else {
for (k = 0; k < count.size();k++) {
for (j = 0;j < count[k];++j) {
num++;
if (num == count.size() + 1) {
num = 0;
count.push_back(vm[k%m]);
for (int a = 0;a < vm[k%m];++a) {
cout << vm[(count.size() - 1) % m] << endl;
cnt++;
if (cnt == n) {
cnt = 0;
n = 0;
break;
}
}
k = count.size() - 1;
break;
}
}
}
}
}
}
}
return 0;
}