在Byteland国家,一个字符串" S"当且仅当字符串中每个字符的数量等于其ascii值时,才称超级ascii字符串。
在Byteland国家/地区ascii代码' a'是1,' b'是2 ...' z'是26岁。
任何字符串" S"可以通过执行添加或删除字符等操作将其转换为超级ascii字符串。
这里的任务是找出将字符串转换为super ascii string所需的最小操作次数。
input:number of test cases 3
bcc
scca
accc
output:
2(here b's value is 2 i have to add one b and c's value is 3 i have to add one c so total 2)
19
0
我达到了这个水平 我的代码是
#include <stdio.h>
#include <stdlib.h>
int main()
{
int T,i,k=1;
char j;
char str1[100];
printf("number of test cases");
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%s",str1);
}
for(j=97;j<123;j++)
{
j==k++;
}
return 0;
}
请帮我解决这个问题。
答案 0 :(得分:0)
请尝试以下代码 -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int T,i,j,k,count=0,inc=0;
char str1[10][100];
printf("number of test cases");
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%s",str1[i]);
}
for(i=0;i<T;i++)
{
for(j=0;str1[i][j];j++)
{
if(str1[i][j])
inc++;
//printf("%c\n",str1[i][j]);
//printf("%d %d %d\n",j,j+1,strlen(str1[i]));
for(k=j+1;k<strlen(str1[i]);k++){
if(str1[i][j] == str1[i][k]){
//printf("%c %c %d\n",str1[i][j],str1[i][k],k);
inc++;
j=k;
}
}
//printf("Inc: %d\n",inc);
if(inc < (str1[i][j]-96))
count+= (str1[i][j]-96-inc);
//printf("Count %d\n",count);
inc = 0;
}
printf("Count for %s is %d\n",str1[i],count);
count = 0;
}
return 0;
}
如果你遇到任何困难,请试着坚持下去吧!
答案 1 :(得分:0)
请勿使用97
等。使用'a'
。
计算每个小写字母的出现次数。
评估非零数是否高于或低于预期值。
char *superascii(const char *s) {
static char buffer[(1 + 26) * 26/2 + 1];
char *dest = buffer;
unsigned count[26] = { 0 };
while (*s) {
if (*s < 'a' || *s > 'z')
return "?"; // TBD error handling
unsigned expect = *s - 'a' + 1;
if (count[*s - 'a'] < expect) {
count[*s - 'a']++;
*dest++ = *s;
}
s++;
}
for (int letter = 'a'; letter <= 'z'; letter++) {
unsigned cnt = count[letter - 'a'];
if (cnt > 0) {
unsigned expect = letter - 'a' + 1;
while (cnt < expect) {
cnt++;
*dest++ = letter;
}
}
*dest = '\0';
}
return buffer;
}
int main(void) {
printf("%s\n", superascii("bcc"));
printf("%s\n", superascii("scca"));
printf("%s\n", superascii("accc"));
return 0;
}
Output:
bccbc
sccacssssssssssssssssss
accc
建议在评估时形成结果字符串。将每个char
从源复制到目标。 (最大目标字符串大小为1 + 2 + 3 ... + 26 + 1.)count[letter - 'a'] == expect
后,不再复制该字母。复制字母后,在出现count[letter - 'a'] > 0
expect - count[letter - 'a']
letter
{{1}}之后追加所需的字母。