c - 为什么我的回答总是错

标签 c numbers logic adhoc

我正在解决 Codechef BUY1GET1 上的问题。问题如下。

有一天,爱丽丝前往 Byteland 为她即将到来的结婚纪念日购买珠宝。 在Byteland,每家珠宝店都有自己的折扣方式来吸引顾客。一种名为“Buy1-Get1”的折扣方法引起了 Alice 的注意。也就是说,Alice 购买了一件珠宝,那么她可以通过买一送一的方式免费获得一件相同颜色的珠宝。 Alice将需要的珠宝列出为字符串S,每个字母表示一颗珠宝,相同的字母表示相同颜色的珠宝,不同的字母表示不同颜色的珠宝。每件珠宝的成本为 1。您的任务是计算获得爱丽丝列出的所有珠宝的最低成本。 输入

输入的第一行包含单行T,表示测试用例的数量。接下来是 T 行,每行包含一个字符串 S,代表 Alice 需要的珠宝。 输出

输出每个测试用例的最小成本。 约束

1 ≤ T ≤ 100 1≤|S| ≤ 200,其中 |S|表示字符串S的长度。 字符串 S 区分大小写,并且仅包含 [a-z]、[A-Z] 范围内的英文字符。 示例

Input:
4
ssss
ssas
sa
s

Output:
2
3
2
1

我在 Codechef 上总是得到错误的答案,但在我的电脑上它给出的输出与示例案例相同。我不明白为什么? 这是我的代码。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
    int t;
    scanf("%d\n",&t);
    while(t--)
    {
        int i,j,n,m=0,k=0;
        char a[201];
        scanf("%s",a);
        n=strlen(a);
        int count=0;
        for(i=0;i<n;i++)
        {
            count=0;
            if(isalpha(a[i]))
            {
                count++;
                for(j=i+1;j<n;j++)
                {
                    if(a[j]==a[i])
                    {
                        count++;
                        a[j]=++k;
                    }
                }
            }
            //printf("%dc\n",count );
            if(count%2==0)
            {
                m+=(count/2);
                //printf("%dm1\n",m);
            }
            else if(count%2!=0)
                m+=(1+count/2);
        }
        printf("%d\n",m );
    }
    return 0;
}

最佳答案

确定

只需替换以下行:

a[j]=++k;

a[j]= '\0';

然后再次提交。

说明

对于某些情况,k 的值范围为 65-90 和 97-122 然后k被视为一个字符,因为它获得了字符的ascii值。

因此每次都为数组 a[] 分配一个空值,我认为它会起作用。

关于c - 为什么我的回答总是错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35788997/

相关文章:

java - 在 Java 中使用 switch 的问题

c - 数组访问 args[0][1] -'0'

python - 如何在python中将字符串转换为数字

javascript - 在文本区域中显示行号

algorithm - 查找给定范围之间的最大不同数字

php - 分页问题 [PHP]

r - 如何编写 R 脚本来检查直线;即,对于任何给定的行,一组列中的所有值是否都具有相同的值

c - unsigned int 变量何时变为负数

c - C 中的子进程未更新全局变量

c - 如何将malloc内存划分为c中的 block