用java怎么把一首诗从横的变竖的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java怎么把一首诗从横的变竖的相关的知识,希望对你有一定的参考价值。

具体实现代码如下:

package test;
 
public class Test

    public static void main(String[] args)
    
        String separator = System.getProperty("line.separator");
        String str = "床前明月光" + separator + "疑是地上霜" + separator +             "这是最长的一行" + separator + "最短的一行";
        String[] strArray = str.split(separator);
         
        int maxLine = 0;
 
        String tmpStr = null;
         
        for (int i = 0; i < strArray.length; i++)
        
            if (strArray[i].length() > maxLine)
            
                maxLine = strArray[i].length();
            
        
 
        for (int j = 0; j < maxLine; j++)
        
            for (int i = 0; i < strArray.length; i++)
            
                if (j >= strArray[i].length())
                
                    tmpStr = "\\t  ";
                
                else
                
                    tmpStr = "\\t" + strArray[i].charAt(j);
                
                System.out.print(tmpStr);
            
            System.out.println("");
        
    

参考技术A package com.test;

public class Demo

public static void main(String[] args)
String a = "白日依山尽";
String b = "黄河入海流";
int maxLength = 0;

String[] arrayA = a.split("");
maxLength = getMaxLength(maxLength, arrayA);

String[] arrayB = b.split("");
maxLength = getMaxLength(maxLength, arrayB);
String [][]array = arrayA,arrayB;

for(int index = 0 ; index < maxLength ; index++)
for(int i=0 ; i < array.length ; i++)
String[] tempArray = array[i];
if(indexInLength(index, tempArray))
System.out.print(array[i][index]);


System.out.println();




public static int getMaxLength(int maxLength , String [] array)
if(maxLength >= array.length)
return maxLength;
else
return array.length;


public static boolean indexInLength(int index , String [] array)
if(index >= array.length)
return false;
else
return true;



可以用多维数组
参考技术B print和println。。。

cf1200 D White Lines(二维差分)

题目大意

有一个大小为n的矩阵,每个1*1的单位为黑或白,我们可以用一个(只有一个)大小为k*k的白色矩阵覆盖,问:最多的时候有几条白线(横的全为白 或竖的全为白 即为白线)。

 

思路

要想把一条线(以横的为例)全变为白的,那么我们就需要从这一行最左边的黑色块覆盖到最右边的黑色块,如果两端距离超过k,则无法覆盖,否则就一定可以。那么就一定会产生一个矩阵,选取这个矩阵里面的任何一个点 都可以将这行变为白线;反之,矩阵外的一定不行。所以,可以用差分数组,因为只要选了矩阵里的点,答案就一定就加一。然后二维前缀和,最后max取答案。

 

代码

 

#include <stdio.h>
#include <queue>
#include <string>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long int ll;
const int maxn = 2e3 + 10;
const ll inf = 0x3f3f3f3f;
int res[maxn][maxn];
char mp[maxn][maxn];
int main()
{
    int n,k,ans,anss;
    while(scanf("%d%d",&n,&k) != EOF){
        for(int i = 1;i <= n;i++)
            scanf("%s",mp[i] + 1);
        memset(res,0,sizeof(res));
        ans = anss = 0;

        for(int i = 1;i <= n;i++){
            int mi = n + 1,mx = 0;
            for(int j = 1;j <= n;j++){
                if(mp[i][j] == B){
                    mi = min(j,mi);
                    mx = max(j,mx);
                }
            }
            if(mx == 0){
                anss++;
                continue;
            }
            if(mx - mi + 1 > k)
                continue;
            res[max(i - k + 1,1)][max(mx - k + 1,1)]++;
            res[max(i - k + 1,1)][mi + 1]--;
            res[i + 1][max(mx - k + 1,1)]--;
            res[i + 1][mi + 1]++;
        }
        for(int i = 1;i <= n;i++){
            int mi = n + 1,mx = 0;
            for(int j = 1;j <= n;j++){
                if(mp[j][i] == B){
                    mi = min(j,mi);
                    mx = max(j,mx);
                }
            }
            if(mx == 0){
                anss++;
                continue;
            }
            if(mx - mi + 1 > k)
                continue;
            res[max(mx - k + 1,1)][max(i - k + 1,1)]++;
            res[mi + 1][max(i - k + 1,1)]--;
            res[max(mx - k + 1,1)][i + 1]--;
            res[mi + 1][i + 1]++;
        }

        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= n;j++){
                res[i][j] += res[i - 1][j] + res[i][j - 1] - res[i - 1][j - 1];
                ans = max(ans,res[i][j]);
            }
        }

        printf("%d
",ans + anss);
    }
    return 0;
}

 

以上是关于用java怎么把一首诗从横的变竖的的主要内容,如果未能解决你的问题,请参考以下文章

竖表变横表怎么操作?你有啥快速的操作方法吗?

sql 里面怎么把竖表变成横表

cf1200 D White Lines(二维差分)

bzoj3518点组计数

桌面工具栏怎么还原?跑到右边变成竖得了!

「USACO11NOV」牛的障碍Cow Steeplechase 解题报告