UVA 1368 我直接使用printf agtc 一个个输出就是ac 我用数组储存起来%s输出就是wa求解

weixin_44019404 2019-01-03 02:42:23
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
//#define local
int m, n;
int t;
char s[100][1005],s2[1005];
int num[4];
int count;
int max,max1;
int main()
{

scanf("%d", &t);
while (t--)
{
count = 0;
scanf("%d %d", &m, &n);
for (int i = 0; i < m; i++)
{
scanf("%s", s[i]);
}
for (int j = 0; j < n; j++)
{
memset(num, 0, sizeof(num)*4);
for (int i = 0; i < m; i++)
{
if (s[i][j] == 'A') num[0]++;
if (s[i][j] == 'C') num[1]++;
if (s[i][j] == 'G') num[2]++;
if (s[i][j] == 'T') num[3]++;
}
max = 0;
max1 = num[0];
//printf("0:%d,1:%d,2:%d,3:%d\n", num[0], num[1], num[2], num[3]);
for (int k = 0; k < 4; k++)
{
if (max1 < num[k])
{
max1 = num[k];
max = k;
}
}
if (max== 0)s2[j] = 'A';//printf("A");
if (max== 1)s2[j] = 'C';//printf("C");
if (max== 2)s2[j] = 'G';//printf("G");
if (max== 3)s2[j] = 'T';//printf("T");
count += m - num[max];
//printf("count:%d,max:%d\n", count, num[max]);
}
s2[n] = '\0';
printf("%s\n%d\n", s2, count);
//if (t)printf("\n");
}
return 0;
}
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44019404 2019-01-03
  • 打赏
  • 举报
回复
引用 1 楼 自信男孩 的回复:
memset(num, 0, sizeof(num)*4);

这条语句已经越界了。sizeof(num)的长度就是数组的长度了。所以,去掉*4;

可以改成这样:

memset(num, 0, sizeof(num[0])*4);

用//后面那种printf ATCG的方式就是对的
我在想是不是溢出了数组
我把数组改成了2000也还是不行
weixin_44019404 2019-01-03
  • 打赏
  • 举报
回复
引用 1 楼 自信男孩 的回复:
memset(num, 0, sizeof(num)*4);

这条语句已经越界了。sizeof(num)的长度就是数组的长度了。所以,去掉*4;

可以改成这样:

memset(num, 0, sizeof(num[0])*4);

啊谢谢这里我没有看到
我修改了 用数组的方式还是wa
自信男孩 2019-01-03
  • 打赏
  • 举报
回复
memset(num, 0, sizeof(num)*4);

这条语句已经越界了。sizeof(num)的长度就是数组的长度了。所以,去掉*4;

可以改成这样:

memset(num, 0, sizeof(num[0])*4);

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧