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

简介: 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;  
}  
目录
相关文章
|
5月前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
3月前
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
3月前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
3月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
424 1
|
4月前
|
Java
Java中将保留四位小数的Double转换为String的方法详解
选择合适的方法,可以使代码更加简洁、高效,同时也能满足不同场景下的需求。
63 5
|
4月前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
4月前
|
安全 Java
Java基础之StringBuffer
【7月更文挑战第1天】 Java中的`StringBuffer`是线程安全的字符串操作类,适合多线程环境,而`StringBuilder`非线程安全,速度更快,适用于单线程。两者提供`append()`、`insert()`、`delete()`等方法修改字符串,避免了频繁创建新对象的性能问题。在不需要线程安全时,推荐使用`StringBuilder`以提高效率。
30 1
|
5月前
|
Java 数据处理 Apache
探讨Java中判断String类型为空和null的方法
探讨Java中判断String类型为空和null的方法
65 1
|
5月前
|
Java API 索引
java中String类常用API
java中String类常用API
|
5月前
|
Java
Java中String的用法
Java中String的用法
41 1