工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1059|回复: 3

ZJU-2208不知错哪...请教...谢谢

[复制链接]
发表于 2005-6-22 16:59 | 显示全部楼层 |阅读模式
ZJU-2208:
我归纳了每次对输入的串的位置进行排序的规律,--
  输入列数n;
  输入串,以a1,a2,a3,a4....an代表;
  循环i=n次,
  每次循环中,第一次取(2*n-1)-2*i位置的字符,第二次取1+2*i位置的字符,把所取的字符顺序输出便是结果(没有完全证明,但是经过多次试验数据正确).但是没法AC,拜托各位赐教.
#include <iostream>
#include <stdio.h>

using namespace std;

struct str
{
   char * s;
   int length;
};

int main()
{
   str s1[20];
   str s2[20];
   int i=0,q=0,m;
   int k=0,j,g,c;
   int n,p;
   for(q=0;q<20;q++)
   {
       s1[q].length=0;
       s1[q].s=(char*)malloc(200*sizeof(char));
       s2[q].length=0;
       s2[q].s=(char*)malloc(200*sizeof(char));
   }
    for(q=0;q<20;q++)
   {
   cin>>n;
   if(n==0) break;
   while(!scanf("%s",s1[q].s));
   i=0;
   while(s1[q].s!='\0')
   {
      s1[q].length++;
      i++;
   }
   p=s1[q].length;
   while(p%n!=0)
   {
      p=p+1;
      s1[q].s[p]='x';
      s1[q].s[p+1]='\0';
   }
   s1[q].length=p;
   for(i=0;i<n;i++)
   {
      g=0;c=i;
      s2[q].s[k]=s1[q].s[c];
      for(j=0;j<s1[q].length/n;j++)
      {
         g++;
         if(g%2!=0)
         {
             k++;
             c=c+((2*n-1)-2*i);
            s2[q].s[k]=s1[q].s[c];
         }
         if(g%2==0)
         {
            k++;
            c=c+(1+2*i);
            s2[q].s[k]=s1[q].s[c];
         }
      }
   }
   s2[q].s[k+1]='\0';
   }
   i=0;
   for(m=0;m<q;m++)
   {
       while(s2[m].s!='\0')
       {
          cout<<s2[m].s;
          i++;
       }
      cout<<endl;
   }
   return 0;
}

[ Last edited by Fach on 2005-6-22 at 17:03 ]
发表于 2005-6-22 17:03 | 显示全部楼层
#include <stdio.h>
#include <string.h>
int main()
{
        int i,j,k,n,len;
        char w[410];
        freopen(\"in.txt\",\"r\",stdin);
        freopen(\"out.txt\",\"w\",stdout);
        while(1)
        {
                scanf(\"%d\",&n);
                if (n==0) break;
                scanf(\"%s\",w);
                len=strlen(w);
                for (i=0;i<n;i++)
                {
                        j=i+1;
                        while(j<=len)
                        {
                               
                                printf(\"%c\",w[j-1]);
                                j=j+(n+n-i-i-1);
                                if (j>len) break;
                                printf(\"%c\",w[j-1]);
                                j=j+i+i+1;
                        }

                }
                printf(\"\\n\");

        }
        return 0;
}
回复

使用道具 举报

发表于 2005-6-22 17:04 | 显示全部楼层
我贴了代码,你可以这样.你自己随便建立一些测试数据.然后对比两个程序的运行结果.错误的进行跟踪,查找错误的代码
用freopen 函数帮助调试
回复

使用道具 举报

 楼主| 发表于 2005-6-22 17:17 | 显示全部楼层
好办法!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-13 15:27

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表