鱼C论坛

 找回密码
 立即注册
查看: 717|回复: 2

代码实现

[复制链接]
发表于 2023-11-18 22:08:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int n, cnt = 0, maxn = 0,x=0;

  4. // 题目描述:只有0和1两个数,

  5. void solve() {
  6.         vector<int>a[100];
  7.     cin>>n;
  8.     for(int i=1;i<=n;i++)
  9.     {
  10.         cin>>x;
  11.         a[x].push_back(i); //存入1的小标

  12.     }
  13.    
  14.         int num=a[1].size();
  15.         for(int j=1;j<=num;j++)
  16.         {
  17.             //记录了每个1的下标,如果两个相邻1的下标>2则中间必有0,统计个数,输出最大值
  18.             //
  19.         }
  20.    
  21. }

  22. int main() {
  23.         int t;
  24.         cin >> t;
  25.         while (t--) {
  26.                 solve();
  27.         }
  28.         return 0;
  29. }
  30.                                                                                                                        
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-18 22:09:53 | 显示全部楼层
下面是修改后的代码,以实现题目描述的功能:
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. void solve() {
  5.     int n, x;
  6.     cin >> n;
  7.     vector<int> a[2]; // 使用数组保存 0 和 1 的下标
  8.     for (int i = 1; i <= n; i++) {
  9.         cin >> x;
  10.         a[x].push_back(i);
  11.     }
  12.     int cnt = 0, maxn = 0;
  13.     int num = a[1].size();
  14.     for (int j = 1; j < num; j++) {
  15.         if (a[1][j] - a[1][j - 1] > 1) {
  16.             cnt++;
  17.         }
  18.     }
  19.     maxn = max(maxn, cnt);
  20.     cout << num - maxn << endl;
  21. }
  22. int main() {
  23.     int t;
  24.     cin >> t;
  25.     while (t--) {
  26.         solve();
  27.     }
  28.     return 0;
  29. }
复制代码

修改说明:
- 添加了包含必要头文件<iostream><vector>
- 将变量cntmaxn的初始化移到solve()函数内部。
- 在solve()函数中,将输入变量nx的声明移至函数内部。
- 修改了统计相邻1之间距离大于1的个数的逻辑,并更新最大值maxn
- 添加输出语句cout << num - maxn << endl;,输出结果。

希望以上回答对你有所帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-18 22:13:36 | 显示全部楼层
这段代码的作用是读取一组由0和1组成的序列,然后统计相邻1之间的0的个数,并输出最大的0的个数。不过目前代码中存在一些问题,比如未能正确统计相邻1之间的0的个数,也没有输出最大的0的个数。此外,代码中还存在一些不规范的写法,比如未初始化变量和未使用的变量等。

以下是修改后的代码:

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;

  4. void solve() {
  5.     int n;
  6.     cin >> n;
  7.     vector<int> a(n);
  8.     for (int i = 0; i < n; i++) {
  9.         cin >> a[ i];
  10.     }

  11.     int maxZeros = 0;
  12.     for (int i = 0; i < n; i++) {
  13.         if (a[ i] == 1) {
  14.             int zeros = 0;
  15.             int j = i + 1;
  16.             while (j < n && a[j] == 0) {
  17.                 zeros++;
  18.                 j++;
  19.             }
  20.             maxZeros = max(maxZeros, zeros);
  21.         }
  22.     }

  23.     cout << maxZeros << endl;
  24. }

  25. int main() {
  26.     int t;
  27.     cin >> t;
  28.     while (t--) {
  29.         solve();
  30.     }
  31.     return 0;
  32. }
复制代码


这段代码首先读取了一个整数t,表示测试用例的数量。然后对于每个测试用例,先读取了一个整数n,表示序列的长度,然后读取了长度为n的序列。接着使用一个循环遍历整个序列,当遇到1时,就开始统计相邻的0的个数,并更新最大的0的个数。最后输出最大的0的个数。

这样修改后的代码能够正确地实现题目描述的功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 05:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表