题意:
给定长度为 n 的只含有 A T C G ? 的字符串,其中的 ? 可以转换为任何一个字母,问是否存在 A T C G碱基个数需要相等。
不存在输出 ===
思路:
简单的模拟题,尴尬的就在于,明明在提交输出的多一个 -> ?
AC CODE:
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#define HardBoy main()
#define ForMyLove return 0;
using namespace std;
const int MYDD = 1103;
int HardBoy {
int a = 0, g = 0, c = 0, t = 0, n;
char s[MYDD];
scanf("%d %s", &n, s);
if(n%4 != 0){
puts("===");
} else {
for(int j = 0; j < n; j++){
if(s[j] == '?') continue;
if(s[j] == 'A') a++;
else if(s[j] == 'C') c++;
else if(s[j] == 'G') g++;
else if(s[j] == 'T') t++;
}
int v = n/4;
if(c > v || a > v || g > v || t > v){
puts("===");
} else {
for(int j = 0; j < n; j++){
if(s[j] == '?'){
if(a < v){
s[j] = 'A';
a++;
} else if(c < v){
s[j] = 'C';
c++;
} else if(g < v){
s[j] = 'G';
g++;
} else if(t < v){
s[j] = 'T';
t++;
}
}
}
printf("%s\n", s);
}
}
ForMyLove
}
所谓 WA CODE:
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#define HardBoy main()
#define ForMyLove return 0;
using namespace std;
const int MYDD = 1103;
int HardBoy {
int a[4] ={0}, b[4] ={0}, n;
char s[MYDD], zi[] = {"ACGT"};
scanf("%d %s", &n, s);
if(n % 4){
puts("===");
} else {
for(int j = 0; j < n; j ++){
if(s[j] == 'A') a[0]++;
if(s[j] == 'C') a[1]++;
if(s[j] == 'G') a[2]++;
if(s[j] == 'T') a[3]++;
}
for(int j = 0; j < 4; j++){
b[j] = n/4 - a[j];
if(b[j] < 0){
puts("===");
return 0;
}
}
for(int i = 0; i < n; i++){
while(s[i] == '?'){
for(int j = 0; j < 4; j++){
if(b[j] <= 0) continue;
printf("%c", zi[j]);
b[j]--;
i++;
break;
}
} printf("%c", s[i]);
}
}
ForMyLove
}
/*
8
????????
ACCATTGG
*/