我正在解决有关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;
}
答案 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 []赋一个空值,我觉得它会起作用。