标题:关于字符串问题,请看一下3个点为什么只过了1个
取消只看楼主
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
结帖率:96.88%
已结贴  问题点数:6 回复次数:7 
关于字符串问题,请看一下3个点为什么只过了1个
程序代码:
#include<stdio.h>
#include<string.h>
void print(char s[],char ss[])
{  int n=0;
   int    l=strlen(s);
     for(int i=0,j=l-1;n<l;n++)
        {
            if(s[i]<s[j]) ss[n]=s[i++];
            else if(s[i]>s[j]) ss[n]=s[j--];
            else
            {     int k;

                for(k=1;s[i+k]==s[i-k];k++);
                if(s[i+k]<s[j-k]) ss[n]=s[i++];
                else ss[n]=s[j--];


}}}
int main()
{
    int n;
    scanf("%d",&n);
    for(int p=0;p<n;p++)
    {   int l;
        char a[600];
        char b[600];
        scanf("%d\n%s",&l,a);
        printf("case #%d:\n",p);
        print(a,b);
        printf("%s\n",b);

    }
    return 0;
}
搜索更多相关主题的帖子: for i++ int char 字符串 
2020-03-18 03:00
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
题目在https://acm.ecnu.
//虽然我也是抄了讨论区的代码但是只过了一个点不明白为什么

我想要两颗西柚。
2020-03-18 03:01
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
给定长度为 N 的字符串 S,要构造一个长度为 N 的字符串 T。起初,T 是一个空串,随后反复执行下列两个操作中的任意一个,最终 目标是构造字典序尽可能小的字符串 T。
操作一:从 S 的头部取一个字符,加到 T 的尾部。
操作二:从 S 的尾部取一个字符,加到 T 的尾部。
例如:输入 N=6,S=ACDBCB;构造的 T=ABCBCD
具体按下图进行操作。


输入格式
第 1 行:整数 T(1≤T≤10) 为问题数。
第 2 行:第一个 问题中的 N(1≤N≤500),表示字符串 S 的长度。
第 3 行:输入一个字符串 S,只包含大小写英文字母。
第 4 ~ 2*T+1 行:后面问题的数据 ,格式与第 1 个问题相同。
输出格式

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后 输出由 S 字符串构造出来的 字典序尽可能小的字符串 T。
样例
Input

3
2
ba
5
SORTS
10
Sarumanarm

Output

case #0:
ab
case #1:
SORST
case #2:
Samranamru


我想要两颗西柚。
2020-03-18 03:03
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
回复 4楼 吹水佬
好像没考虑到开头=末尾的情况qaq

我想要两颗西柚。
2020-03-18 13:04
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
回复 6楼 lin5161678
请问是什么意思?有点没明白

我想要两颗西柚。
2020-03-18 14:42
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
程序代码:
#include<string.h>
void print(char s[],char ss[])
{  int n=0;
   int    l=strlen(s);
     for(int i=0,j=l-1;n<l;n++)
        {
            if(s[i]<s[j]) ss[n]=s[i++];
            else if(s[i]>s[j]) ss[n]=s[j--];
            else
            {     int k;

                for(k=1;s[i+k]==s[l-i-k-1];k++);
                if(s[i+k]<s[j-k]) ss[n]=s[i++];
                else ss[n]=s[j--];
}}



}
int main()
{
    int n;
    scanf("%d",&n);
    for(int p=0;p<n;p++)
    {   int l;
        char a[600];
        char b[600];
        scanf("%d\n%s",&l,a);
        printf("case #%d:\n",p);
        print(a,b);
      for(int count=0;count<strlen(a);count++)
        printf("%c",b[count]);
      printf("\n");

    }
    return 0;
}

//好像不是'\0'的问题耶,这样改过就对了,虽然不明白为什么直接输出b这个字符串后面会有乱码

我想要两颗西柚。
2020-03-18 15:23
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
回复 10楼 lin5161678
我一直以为'\0'都会自动添加的,谢谢!
但是请问为什么加了'\0'也不能直接输出字符串b呢

我想要两颗西柚。
2020-03-18 15:37
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
得分:0 
回复 12楼 吹水佬
应该不一样吧,取头的话下一次的选择是第二个和最后一个;取尾的话下一次的选择是第一个和倒数第二个
应该要不断比较的吧?

我想要两颗西柚。
2020-03-18 17:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500399-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.283101 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved