为什么写的代码运行不正确,思想应该是正确的吧?

img

img


#include 
#include 
#include 

using namespace std;

int main(){
    char a[100000];
    int count=0;
    fgets(a,100000,stdin);
    for(int i=0;i<100000;i++){
        int flag=1;
        if(a[i]=='\0') break;
        for(int j=0,len=strlen(a);jif(i==j) continue;
            if(a[i]==a[j]){
                flag=0; 
                break;
            }
        }
        if(flag=1){
            cout << a[i] << endl;
            count++;
        }
    }
    if(count==0) cout << "no" << endl;
}

运行不正确是啥现象啊
a数组建议放到main函数外,作为全局变量,申请的空间大了
22行写错了,应该是if(flag == 1)
你这代码肯定是不行的,双循环肯定超时,修改如下:

 
#include <iostream>
#include <cstdio>
#include <cstring>
 
using namespace std;
char s[100000];
int c[26] = {0};
int main(){
    fgets(s,100000,stdin);
    int i=0;
    while(s[i] != '\0')
    {
        if(c[s[i]-'a'] == 0)
            c[s[i]-'a'] = i+1;
        else
            c[s[i]-'a'] = 0;
        i++;
    }
    int minPos = 100000;
    for(i=0;i<26;i++)
    {
        if(c[i] != 0)
        {
            if(c[i] < minPos)
                minPos = c[i];
        }
    }
    if(minPos == 100000)
        cout<<"no";
    else
        cout<<s[minPos-1];
    return 0;
}
 

if(flag=1)
改为
if(flag==1)
低级错误

  1. if(flag=1) 改成flag==1
  2. 题目要求只输出满足要求的第一个字符,你这个会吧所有单字符都输出出来
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632