1. 首页
  2. 技术
  3. 后台

手把手教编写程序-士兵队列训练问题

1审阅题目后决定采用固定数组来处理,动态数组在之后自己去实现


2看2个示例先写一个100的数组并赋值为输入的数量,同时进行初始化后输出,观察程序是否按意图正常运行:


int aa[100]{0},n=0,j=0;


cout << “输入数量” << endl;cin>>n;


while(j<n)aa[j]=1+j++;


j=0;while(aa[j])cout<<aa[j++]<<ends;cout<<endl;


3依据题目条件先写一个报数2剔除的,把凡是报2的数组赋值为0即可


int bs=0;j=0;


while(j<n){if(aa[j])++bs;if(bs==2){aa[j]=0;bs=0;}++j;}


4剔除报2的数组后输出看看


j=0;while(j<n)if(aa[j])cout<<aa[j++]<<ends;else ++j;cout<<endl;


5接着按上面的写报3的剔除


看看报2剔除的输出



手把手教编写程序-士兵队列训练问题

5接着按上面的写报3的剔除,复制代码修改即可。
 bs = j = 0;
 while (j<n){ if (aa[j])++bs; if (bs == 3){ aa[j] = 0; bs = 0; }++j; }
 j = 0; while (j < n)if (aa[j])cout << aa[j++] << ends; else ++j; cout << endl;
输出查看是否正常运行结果

6写一个结束变量用于按题目结束剔除。
int js=0;
while(1)//把上面2个剔除循环复制过来,写一个结束判断。
{
 bs = j =js= 0;
 while (j<n){ if (aa[j])++bs,++js; if (bs == 2){ aa[j] = 0; bs = 0; –js;}++j; }
 j = 0; while (j < n)if (aa[j])cout << aa[j++] << ends; else ++j; cout << endl;
 if (js <= 3)break;
 bs = j =js= 0;
 while (j<n){ if (aa[j])++bs,++js; if (bs == 3){ aa[j] = 0; bs = 0; –js;}++j; }
 j = 0; while (j < n)if (aa[j])cout << aa[j++] << ends; else ++j; cout << endl;
 if (js <= 3)break;
}
观察输出是否正确运行

逃跑的蠕虫.png (上传于2020-02-06 04:02:44)


手把手教编写程序-士兵队列训练问题

7最后整理一下代码就可以结束本题的编程了。

void 士兵队列训练()

{//缘由https://bbs.bccn.net/redirect.php?tid=499026&goto=lastpost#lastpost

 int aa[100]{0}, n = 0, j = 0, bs = 0, js = n;

 cout << “输入数量” << endl; cin >> n;

 while (j < n)aa[j] = 1 + j++;

 j = 0; while (aa[j])cout << aa[j++] << ends; cout << endl;

 while (1)

 {

  bs = j = js = 0;

  while (j < n){ if (aa[j])++bs, ++js; if (bs == 2){ aa[j] = 0; bs = 0; –js; }++j; }

  if (js <= 3)break;

  bs = j = js = 0;

  while (j<n){ if (aa[j])++bs, ++js; if (bs == 3){ aa[j] = 0; bs = 0; –js; }++j; }

  if (js <= 3)break;

 }

 j = 0; while (j < n)if (aa[j])cout << aa[j++] << ends; else ++j; cout << endl;

}

8优化代码

void 士兵队列训练()

{//缘由https://bbs.bccn.net/redirect.php?tid=499026&goto=lastpost#lastpost

 int aa[100]{0}, n = 0, j = 0, bs = 0, js = n; bool k = true;

 cout << “输入数量” << endl; cin >> n;

 while (j < n)aa[j++] = j + 1;

 j = 0; while (aa[j])cout << aa[j++] << ends; cout << endl;

 while (1)

 {

  bs = j = js = 0;

  while (j < n){ if (aa[j])++bs, ++js; if (bs == (k ? 2 : 3)){ aa[j] = 0; bs = 0; –js; }++j; }

  if (js <= 3)break;

  if (k) k = false; else k = true;

 }

 j = 0; while (j < n)if (aa[j])cout << aa[j++] << ends; else ++j; cout << endl;

原创文章,作者:xianfajushi的博客,如若转载,请注明出处:https://www.zengqueling.com/%e6%89%8b%e6%8a%8a%e6%89%8b%e6%95%99%e7%bc%96%e5%86%99%e7%a8%8b%e5%ba%8f-%e5%a3%ab%e5%85%b5%e9%98%9f%e5%88%97%e8%ae%ad%e7%bb%83%e9%97%ae%e9%a2%98/

联系我们

15602395067

在线咨询:点击这里给我发消息

邮件:eden7@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code