鱼C论坛

 找回密码
 立即注册
查看: 864|回复: 4

[已解决]求助

[复制链接]
发表于 2023-8-30 21:14:07 | 显示全部楼层 |阅读模式

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

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

x
原题链接
https://www.luogu.com.cn/problem/P1308
my code
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. map<string,int>a;
  4. int main(){
  5.         string n,temp;
  6.         int i = 0,cnt = -1;
  7.         cin>>n;
  8.         transform(n.begin(),n.end(),n.begin(),::tolower);
  9.         while(cin>>temp){
  10.                 cnt++;
  11.                 transform(temp.begin(),temp.end(),temp.begin(),::tolower);
  12.                 if(temp == n){
  13.                        
  14.                         i++;
  15.                         if(a[temp] == 0) cout<<cnt<<" ";
  16.                         cout<<i;
  17.                 }
  18.         }
  19.         if(a[temp] == 0) cout<<"-1";
  20.         else cout<<i;
  21. }
复制代码

不是,我这个i在通过测试样例1的时候是只++了两次,怎么就成4了;
输入输出样例
输入 #1
To
to be or not to be is a question
输出 #1
2 0
最佳答案
2023-8-30 21:34:50
map没有初始化为1

结帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-30 21:14:35 | 显示全部楼层
问题出在你的代码中,你在每次找到匹配的单词时都会输出计数器i的值,导致i的值被重复输出了。

解决这个问题的方法是,在每次找到匹配的单词时,只输出一次计数器i的值,而不是每次都输出。你可以使用一个变量flag来判断是否已经输出过i的值,如果没有输出过,则输出i的值,并将flag设置为true,以后再找到匹配的单词时就不再输出i的值了。

修改后的代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. map<string,int>a;
  4. int main(){
  5.     string n,temp;
  6.     int i = 0, cnt = -1;
  7.     bool flag = false; // 添加一个标志变量flag
  8.     cin >> n;
  9.     transform(n.begin(), n.end(), n.begin(), ::tolower);
  10.     while(cin >> temp){
  11.         cnt++;
  12.         transform(temp.begin(), temp.end(), temp.begin(), ::tolower);
  13.         if(temp == n){
  14.             i++;
  15.             if(a[temp] == 0){
  16.                 cout << cnt << " ";
  17.             }
  18.             if(!flag){ // 如果flag为false,输出i的值
  19.                 cout << i;
  20.                 flag = true; // 将flag设置为true
  21.             }
  22.         }
  23.     }
  24.     if(a[temp] == 0){
  25.         cout << "-1";
  26.     }
  27.     else{
  28.         cout << i;
  29.     }
  30. }
复制代码


这样修改后,代码应该就能正确输出结果了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-30 21:16:20 | 显示全部楼层
我这个i输出这么多次就是为了测试 bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-30 21:19:08 | 显示全部楼层
测试出来了
map忘设置成1了
谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-30 21:34:50 | 显示全部楼层    本楼为最佳答案   
map没有初始化为1

结帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 12:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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