请问这个程序该怎么改
求大佬给看一下程序代码:
/* 给定长度为 n 且只含有 A、T、C、G和?的字符串s,其中?可以转换为任何一个字母。 问是否存在一个字符串,使得将所有的?替换成字母后,A、T、C、G个数相等。 输入两行 第一行,一个整数n(4<=n<=255),表示字符串的长度 第二行,一个字符串s 输出一行 表示将所有的?替换成字母后使得A、T、C、G个数相等的字符串, 若不存在输出“===”(不含引号)。 Examples input1 8 AG?C??CT output1 AGACGTCT input2 6 ????G? output2 === input3 4 AA?? output3 === */ #include<iostream> using namespace std; int main(){ char x[256]; int a[4]={0}; char g[4]={'A','C','G','T'}; int i,k,c,d=0,flag=0,e=0; scanf("%d",&k); if((k%4)!=0){//长度不是4的倍数直接=== printf("==="); return 0; } x[k]='\0'; for(i=0;i<k;i++){ scanf(" %c",&x[i]); if(x[i]=='?') e++;//统计?出现次数 switch(x[i]){//统计各字母出现次数 case 'A':a[0]++; break; case 'C':a[1]++; break; case 'G':a[2]++; break; case 'T':a[3]++; break; } } if(e==0) goto print;//如果没有?直接输出原字符串 c=k/4;//每个字母应该有的数量 for(i=0;i<4;i++){ if(a[i]>c) {//如果有字母的数量超过了它应该有的数量直接=== printf("==="); return 0; } else a[i]-=c;//计算每个字母还要出现几次 } for(i=0;i<k;i++){ if(x[i]=='?'){ while(flag==0){ if(a[d]>0){//一旦出现?,检查每个字母还要替代多少次 x[i]=g[d]; a[d]--; } else d++;//如果一个字母出全了,再换下一个字母 if(x[i]!='?')flag=1;//一旦成功替换,结束while循环,再找下一个? } flag=0;//结束while循环后把flag初始化 } } print:for(i=0;i<k;i++){ printf("%c",x[i]); } return 0; } }