今天的每日一练中,有一道“小艺改编字符串”的问题。
题目描述:
已知字符串str. 添加至少多少字符可以使得str变成回文串。
输入描述:
输入字符串s.(1<=len(str)<=100)
输出描述:
输出最小需要添加字符的数量。
示例
输入
abab
输出
1
题主报的答案是这样的:
#include
#include
#include
void solution(char *s){
// TODO: 请在此编写代码
int length = strlen(s);
int i, j, k;
int count;
int notEqual = 0;
for (i = 0; i < length; i++) {
notEqual = 0;
for (j = i, k = length - 1; j < length && j <= k; j++, k--) {
if (s[j] != s[k]) {
notEqual = 1;
break;
}
}
if (notEqual == 0) {
printf("%d\n", i);
break;
}
}
}
int main() {
char s[1000];
scanf("%s", s);
solution(s);
return 0;
}
得到的结果是:
运行中
运行成功:
不通过
您的代码已保存。
答案错误,您提交的程序没有通过所有的测试用例。
case通过率:40.0%
我用自己的编译器试了几个实例结果都没错,请各位朋友,指点一二
运行中
是不是死循环或者超时了。
仅供参考!
若结果显示不正确请修改一下输出的格式化字串。
#include <stdio.h>
#include <string.h>
void solution(char *s) {
// TODO: 请在此编写代码
if(!s)
{
puts("不存在!");
return;
}
int len = strlen(s);
//最大长度
int n=len*2-1;
//最大可能添加字符数
int m=len-1;
//最长可能回文
char s0[n+1];
strncpy(s0,s,n);
char *p=s+len-2,*p0=s0+len;
//原字串尾部去重
while(p>=s)
{
if(*p==s[len-1])
m--;
else
break;
p--;
}
//最长可能回文
p=s+m-1;
while(p>=s)
{
*p0++=*p--;
}
*p0='\0';
char *ps0=s0+len-1;
for(int i=0; i<=m; i++)
{
ps0=s0+len+i-1;
p0=s0;
while(ps0>p0)
{
if(*ps0!=*p0)
break;
ps0--,p0++;
}
if(ps0<=p0)
{
printf("%d\n",i);
break;
}
}
}
int main(void) {
char s[1000];
scanf("%100s", s);
solution(s);
return 0;
}
今天的每日一连,也出现了同样的问题,题目:
题目描述
小艺定义一个幸运数字的标准包含3条: 1、仅包含4和7。 2、数字的前半部分等于后半年部分。 3、数字的长度是偶数。
输入描述:
输入整数n。(1<=n<=1e1000)
输出描述:
如果数字n是幸运数字输出“Yes”,否则输出“No”
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void solution(char *n){
// TODO: 请在此编写代码
int length = strlen(n);
int i;
for (i = 0; i < length; i++) {
if (n[i] != '4' && n[i] != '7') {
printf("No");
return;
}
}
int k;
for (i = 0, k = length - 1; i <= k; i++, k--) {
if (n[i] != n[k]) {
printf("No");
return;
}
}
if (length%2 == 0) {
printf("Yes");
}
else {
printf("No");
}
}
int main() {
char n[1000];
scanf("%s", n);
solution(n);
return 0;
}
得到的结果还是这样:
行中...
运行成功:
不通过
您的代码已保存。
答案错误,您提交的程序没有通过所有的测试用例。
case通过率:40.0%