为什么我的答案总是出错

时间:2016-03-04 05:58:58

标签: c numbers logic adhoc

我正在解决有关Codechef BUY1GET1的问题。这是一个问题。

有一天,爱丽丝拜访了Byteland,为即将到来的结婚纪念日购买珠宝。 在Byteland,每个珠宝店都有自己的折扣方法来吸引顾客。一种名为Buy1-Get1的折扣方法引起了Alice的注意。也就是说,爱丽丝购买了一颗宝石,然后她可以免费获得一件带有相同颜色的宝石,而不需要买一个Buy1-Get1。 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;
}

3 个答案:

答案 0 :(得分:0)

溶液:

#include<stdio.h>

int main()
{
int t,h[256],i,cost;
scanf("%d",&t);
char s[201];
while(t--)
{
    for(i=0;i<256;i++)
        h[i]=0;
    scanf("%s",s);
    i=0;
    while(s[i])
    {
        h[s[i]]++;
        i++;
    }
    cost = 0;
    for(i='A';i<='z';i++)
        if(h[i]&1)
            cost += h[i]/2 + 1;
        else                
            cost += h[i]/2;
    printf("%d\n",cost);
 }
 return 0;
}   

答案 1 :(得分:0)

numchar

您可以编写自己的c函数,查找字符串s中存在多少个字符int numchar(char[] s, char c) { int i = 0, n = 0; while ( s[i] != '\0' ) { if (s[i] == c) n++; i++; } return n; }

$('.your-element .next-button').click(function(event){
  //load image
});

答案 2 :(得分:0)

确定

只需替换以下行:

a[j]=++k;

a[j]= '\0';

再次提交。

说明

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

所以每次都给数组a []赋一个空值,我觉得它会起作用。