我正在解决 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/