小提示:部分題目的圖形有偏移現象;解決辦法為,将題目拷貝到記事本,字型設定為‘Fixedsys’。
(編譯環境:windowsXP_sp3 + Visual_C++_2008,保證編譯成功,正常運作。)
14. 有黑白棋子各有N個(分别用*和O代替),按下圖方式排列
***...***OOO...OOO
N個黑棋 N個白棋
允許将相鄰兩個棋子互換位置,最後使隊形成黑白交替排列,試程式設計實作該操作。
代碼如下:
#include<iostream>
using namespace::std;
void main()
{
int n;
char *a;
cout<<"請輸入N的數量"<<endl;
cin>>n;
n=n*2;
a = new char [n];
for(int i=0;i<n/2;i++)
a[i] = 'X';
for(int i=n/2;i<n;i++)
a[i] = 'O';
int k=0;
int m = n;
while(n!=0)
{
for(int i=0;i<n-1;i++)
if(a[i]!=a[i+1])
{
char temp;
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
k++;
cout<<"棋子互換"<<k<<"次之後"<<endl;
for(int j=0;j<m;j++)
cout<<a[j]<<" ";
cout<<endl;
}
else
continue;
n=n-2;
}
cout<<"一共需要互換"<<k<<"次棋子"<<endl;
cout<<endl;
system("pause");
}