Untitled
unknown
c_cpp
2 years ago
2.0 kB
13
Indexable
/*
Assignment 10
Name: ?凋?瘨?
Student Number: 112502508
Course 2023-CE1001-鞈極銝A
*/
#include <iostream>
using namespace std;
int num, n, h;
int one_num = 0;
void change(int *arr, int index, int *ori_arr){
for(int i=index; i<n; i++){//由規定向右找一
if(arr[i]==1){
one_num++;
}
if(arr[i]==1 && i != 0){
if(arr[i]==1 && arr[i-2] ==0){//找到一,可左移
arr[i-1] = 1;//位置向左移
arr[i] = 0;
for(int m2=0; m2<n; m2++){//輸出
cout<<arr[m2];
}
cout<<endl;
//one_num++;
int tem_one_num = 0;
for(int o = n-1; o>i; o--){//其右邊數恢復最初
if(ori_arr[o]==1 && tem_one_num < h-one_num){
tem_one_num++;
arr[o] = 1;
}
else{
arr[o] = 0;
}
}
change(arr, i, ori_arr);//找它右邊的1
}
}
}
}
int main(){
cin>>num;
for(int i=1;i<=num;i++){//有幾場演唱會
cin>>n>>h;
if(n<(2*h-1)){
cout<<"none"<<endl;
}
else{
int seat_arr[n];
int ori_arr[n];
for(int j=0;j<n;j++){//設置一排位置,每個都是0
seat_arr[j] = 0;
}
//創造第一個序列
for(int l=n-1;l>=0;l--){//從陣列的第一個位置
if(l==0){
seat_arr[l] = 1;
one_num++;
if(one_num == h){
break;
}
}
else if(l == n-1){
if(seat_arr[l-1] != 1){
seat_arr[l] = 1;
one_num++;
if(one_num == h){
break;
}
}
}
else if(l != 0 && l!=n-1){//不會超出陣列範圍
if(seat_arr[l+1] != 1 && seat_arr[l-1] != 1){
seat_arr[l] = 1;
one_num++;
if(one_num == h){
break;
}
}
}
}
for(int m1=0; m1<n; m1++){
ori_arr[m1] = seat_arr[m1];
}
//開始排列組合
for(int m2=0; m2<n; m2++){//輸出
cout<<seat_arr[m2];
}
cout<<endl;
while(true){
one_num = 0;
change(seat_arr, 0, ori_arr);
}
}
}
}Editor is loading...
Leave a Comment