天天看點

C++入門必做題 答案 14

小提示:部分題目的圖形有偏移現象;解決辦法為,将題目拷貝到記事本,字型設定為‘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");

}