zoukankan      html  css  js  c++  java
  • 软件工程随堂小作业——寻找“水桶”(C++)

    一、设计思想

      思路与寻找一个水王相似,这次只是计数器和嫌疑人变量都设置为数组。每次选取一个ID与三个嫌疑人比较,若有相同则计数;若三个都不相同,则三个计数器都减一。若减为0,则从新赋值给嫌疑人。

    二、源代码

     1 // 水桶.cpp : Defines the entry point for the console application.
     2 //
     3 
     4 #include "stdafx.h"
     5 #include "iostream.h"
     6 #define MAXSIZE 30
     7 
     8 void FindWater(int ID[], int len,int water[])
     9 {
    10     int counter[3];                    //计数器
    11     counter[0]=counter[1]=counter[2]=0;
    12     water[0]=water[1]=water[2]=-1;    //初始化嫌疑人列表
    13     for(int i=0;i<len;i++)
    14     {
    15         if(counter[0]==0)            //先赋值
    16         {
    17             counter[0]++;
    18             water[0]=ID[i];
    19         }
    20         else if(counter[1]==0)
    21         {
    22             counter[1]++;
    23             water[1]=ID[i];
    24         }
    25         else if(counter[2]==0)
    26         {
    27             counter[2]++;
    28             water[2]=ID[i];
    29         }
    30         else if(ID[i]==water[0])    //如果counter为0,重新赋值
    31         {
    32             counter[0]++;
    33         }
    34         else if(ID[i]==water[1])
    35         {
    36             counter[1]++;
    37         }
    38         else if(ID[i]==water[2])
    39         {
    40             counter[2]++;
    41         }
    42         else                        //如果与三个嫌疑人的ID都不同的话,则三个计数器都自减一,直到counter为0
    43         {
    44              counter[0]--;
    45              counter[1]--;
    46              counter[2]--;
    47          }
    48     }
    49 }
    50 
    51 int main(int argc, char* argv[])
    52 {
    53     int ID[MAXSIZE];                //发帖记录表
    54     int num,WaterKing[3];            //发帖数目、水桶
    55     cout<<"请输入帖子的数量:";
    56     cin>>num;
    57     cout<<"请输入发帖ID:";
    58     for(int i=0;i<num;i++)
    59     {
    60         cin>>ID[i];
    61     }
    62     FindWater(ID,num,WaterKing);
    63     cout<<"水桶是:";
    64     for(i=0;i<3;i++)
    65     {
    66         cout<<WaterKing[i]<<" ";
    67     }
    68     cout<<endl;
    69     return 0;
    70 }

    三、实验截图

    四、心得体会

      一开始,我把问题细化了,以为选取的三个ID必须互不相同,把程序写的很乱,复杂度也不是O(n2),最后也没调试成功。后来我在网上搜索了一下,发现因为他们各自都发帖超过了1/4,所以禁得起抵消,所以可以没有附加的判断条件。于是我就把嵌套的ifelse都给删了,整理了一下就完成了。

      算法吧,还是要从逻辑思维和数学出发才能更好地优化代码。

  • 相关阅读:
    java常用类库
    汇编子程序使用
    Flsk&pyecharts 动态数据可视化
    2019年全国高校计算机能力挑战赛初赛C++语言解答
    搞定vscode编写java(手把手篇)
    搞定vscode编写java
    2019年全国高校计算机能力挑战赛初赛java语言解答
    Java大数类 BigInteger
    2019年全国高校计算机能力挑战赛初赛C语言解答
    二叉搜索树BST(C语言实现可用)
  • 原文地址:https://www.cnblogs.com/JJJanepp/p/4458038.html
Copyright © 2011-2022 走看看