Untitled
unknown
c_cpp
2 years ago
2.0 kB
4
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