HDOJ(HDU) 2137 circumgyrate the string(此题用Java-AC不过!坑)

此题如果有用JavaACDSee,请评论,谢谢了。

Problem Description

Give you a string, just circumgyrate. The number N means you just circumgyrate the string N times, and each time you circumgyrate the string for 45 degree anticlockwise.

Input

In each case there is string and a integer N. And the length of the string is always odd, so the center of the string will not be changed, and the string is always horizontal at the beginning. The length of the string will not exceed 80, so we can see the complete result on the screen.

Output

For each case, print the circumgrated string.

Sample Input

asdfass 7

Sample Output
a
 s
  d
   f
    a
     s
      s

题目意思很简单:

输入一个字符串和一个整数n,n表示把字符串逆时针旋转n个45°,输出旋转后的图形。

注意,n可以是负数,如果是负数,就是按照顺时针旋转就可以了。

和HDU2135题类似。那个是矩阵旋转,这个是字符串旋转。

两题做法都一样,找出循环节分别输出。

此题的字符串旋转8次,可以回到原来的位置,所以对8取余,对8种情况分别输出就可以了。

此题有一个问题,我不知道其他人遇到没有,这个题目用JavaAC不了。。。

下面给出WA的Java代码,和AC的C语言代码。—大家可以对比一下。

Java这个代码完全没问题的,至少我还没找到错哪了,如果有找到的,求告知,谢谢。

WA的Java代码:

package cn.hncu.acm;

import java.util.Scanner;

public class P2137 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.next();
            int n = sc.nextInt();
            n %= 8;
            if (n < 0)
                n += 8;
            int t = str.length();
            if (n == 0)
                System.out.println(str);
            else if (n == 4) {
                for (int i = t - 1; i >= 0; i--)
                    System.out.print(str.charAt(i));
                System.out.println();
            } else if (n == 1) {
                for (int i = t - 1; i >= 0; i--) {
                    for (int j = i; j > 0; j--)
                        System.out.print(" ");
                    System.out.println(str.charAt(i));
                }
            } else if (n == 2) {
                for (int i = t - 1; i >= 0; i--) {
                    for (int j = 0; j < (t / 2); j++)
                        System.out.print(" ");
                    System.out.println(str.charAt(i));
                }
            } else if (n == 3) {
                for (int i = t - 1; i >= 0; i--) {
                    for (int j = t - 1; j > i; j--)
                        System.out.print(" ");
                    System.out.println(str.charAt(i));
                }
            } else if (n == 5) {
                for (int i = 0; i < t; i++) {
                    for (int j = i + 1; j < t; j++)
                        System.out.print(" ");
                    System.out.println(str.charAt(i));
                }
            } else if (n == 6) {
                for (int i = 0; i < t; i++) {
                    for (int j = 0; j < t / 2; j++)
                        System.out.print(" ");
                    System.out.println(str.charAt(i));
                }
            } else if (n == 7) {
                for (int i = 0; i < t; i++) {
                    for (int j = 0; j < i; j++)
                        System.out.print(" ");
                    System.out.println(str.charAt(i));
                }
            }
        }
    }
}

AC的C语言代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>  

char name[100];
int n;  

int main()
{
    while( scanf("%s",name) !=EOF ){
           int t = strlen(name);
           scanf("%d",&n);
           n %= 8;
           if( n < 0 )
               n += 8;
           if( n == 0 )
               printf("%s\n",name);
           else if( n==4 ){
                for( int i=t-1 ; i>=0 ; i-- )
                     printf("%c",name[i]);
                printf("\n");
           }
           else if( n == 1 ){
                for( int i=t-1; i>=0 ; i-- ){
                     for( int j=i ; j>0 ; j-- )
                          printf(" ");
                     printf("%c\n",name[i]);
                }
           }
           else if( n == 2 ){
                for( int i=t-1 ; i>=0 ; i-- ){
                     for( int j=0 ; j<(t/2) ; j++ )
                          printf(" ");
                printf("%c\n",name[i]);
                }
           }
           else if( n == 3 ){
                for( int i=t-1 ; i>=0 ; i-- ){
                     for( int j=t-1 ; j>i ; j-- )
                          printf(" ");
                     printf("%c",name[i]);
                     printf("\n");
                }
           }
           else if( n == 5 ){
                for( int i=0 ; i<t ; i++ ){
                     for( int j=i+1 ; j<t ; j++ )
                          printf(" ");
                     printf("%c\n",name[i]);
                }
           }
           else if( n == 6 ){
                for( int i=0 ; i<t ; i++ ){
                     for( int j=0 ; j<t/2 ; j++ )
                          printf(" ");
                printf("%c\n",name[i]);
                }
           }
           else if( n == 7 ){
                for( int i=0 ; i<t ; i++ ){
                     for( int j=0 ; j<i ; j++ )
                          printf(" ");
                     printf("%c\n",name[i]);
                }
           }
    }
    return 0;
}  
时间: 2024-11-02 09:55:59

HDOJ(HDU) 2137 circumgyrate the string(此题用Java-AC不过!坑)的相关文章

HDOJ/HDU 2537 8球胜负(水题.简单的判断)

Problem Description 8球是一种台球竞赛的规则.台面上有7个红球.7个黄球以及一个黑球,当然还有一个白球.对于本题,我们使用如下的简化规则:红.黄两名选手轮流用白球击打各自颜色的球,如果将该颜色的7个球全部打进,则这名选手可以打黑球,如果打进则算他胜.如果在打进自己颜色的所有球之前就把黑球打进,则算输.如果选手不慎打进了对手的球,入球依然有效. 现在给出打进的球(白球除外)的顺序,以及黑球由哪方打进,你的任务是判定哪方是胜者. 假设不会有一杆同时打进一颗黑球和其他彩球. Inp

HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 看到这个时间,我懵逼了... 果然,Java就是打表,都不能AC,因为Java的输入是流,需要的时间比C真的长好多.... Problem Description You just need to calculate the sum of the formula: 1^2+3^2+5^2+--+ n ^2. Input In each

HDOJ/HDU 2561 第二小整数(水题~排序~)

Problem Description 求n个整数中倒数第二小的数. 每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1. Input 输入包含多组测试数据. 输入的第一行是一个整数C,表示有C测试数据: 每组测试数据的第一行是一个整数n,表示本组测试数据有n个整数(2<=n<=10),接着一行是 n个整数 (每个数均小于100); Output 请为每组测试数据输出第二小的整数,每组输出占一行. Sample Input 2 2 1 2 3 1 1 3 Sam

hdu 1233 还是畅通工程 水题~~~~~~~~~kruskal算法AC

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28355    Accepted Submission(s): 12674 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路

HDU 5863 cjj&#39;s string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但是 m 很小的时候 发现此题DP并不合适.于是想可能是某种组合数学的问题可以直接公式算 看到题解的我.恍然大悟.对于这种数据.可以考虑一下矩阵快速幂优化的DP 首先要想到线性递推的 DP 式子 最直观的想法就是 dp[i][j] = 到第 i 个位置为止.前面最长匹配长度为 j 的方案数 但是如果仔

HDOJ/HDU 1161 Eddy&#39;s mistakes(大写字母转换成小写字母)

Problem Description Eddy usually writes articles ,but he likes mixing the English letter uses, for example "computer science" is written frequently "coMpUtEr scIeNce" by him, this mistakes lets Eddy's English teacher be extremely disco

hdu 5030 Rabbit&#39;s String(后缀数组)

题目链接:hdu 5030 Rabbit's String 题目大意:给定k和一个字符串,要求将字符串拆分成k个子串.然后将每个子串中字典序最大的子串选出来,组成一个包含k个字符串的集合,要求这个集合中字典序最大的字符串字典序最小. 解题思路:网赛的时候试图搞了一下这道题,不过水平还是有限啊,后缀数组也是初学,只会切一些水题.赛后看了一下别人的题解,把这题补上了. 首先对整个字符串做后缀数组,除了处理出sa,rank,height数组,还要处理处f数组,f[i]表示说以0~sa[i]开头共有多少

HDU 4085 斯坦纳树模板题

Dig The Wells Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 971    Accepted Submission(s): 416 Problem Description You may all know the famous story "Three monks". Recently they find som

HDOJ/HDU 2140 Michael Scofield&#39;s letter(字符转换~)

Problem Description I believe many people are the fans of prison break. How clever Michael is!! In order that the message won't be found by FBI easily, he usually send code letters to Sara by a paper crane. Hence, the paper crane is Michael in the he