首页 > 试题广场 >

单组_二维字符数组

[编程题]单组_二维字符数组
  • 热度指数:8458 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个 nm 列的二维字符数组 a ,第 i 行第 j 列元素的值为 a_{i,j}
请你对行和列都倒置,然后输出之。

输入描述:
第一行有两个整数 n\ (\ 1 \leq n \leq 10^3\ )m\ (\ 1 \leq m \leq 10^3\ )
随后 n 行,每行有 m 个字符,仅包含小写英文字符 。


输出描述:
输出一个二维字符数组。
示例1

输入

3 4
abcd
efgh
ijkl

输出

lkji
hgfe
dcba

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //n行
        int n = in.nextInt();
        //m列
        int m = in.nextInt();
        ArrayList<StringBuilder> array = new ArrayList<StringBuilder>();
        int i = 0;
        while (i++ < n) {
            StringBuilder s = new StringBuilder(in.next());
            //列反转,并添加到集合
            array.add(s.reverse());
        }
        //行反转
        Collections.reverse(array);
        for(StringBuilder s : array){
            System.out.println(s);
        }
    }
}
发表于 2024-09-26 17:03:34 回复(0)
C语言简单做法,好懂好学
#include <stdio.h>

int main() {
    char a[1000][1000];
    long int row = 0;
    long int col = 0;
    scanf("%ld %ld", &row, &col);
    /* 先对行进行扫描 */
    for (long int i = 0; i < row; i++) 
    {
        getchar(); /* 去除换行符 */
        for (long int j = 0; j < col; j++) 
        {
            scanf("%c", &a[i][j]);
        }
    }
    for (long int i = row - 1; i >= 0; i--) 
    {
        for (long int j = col - 1; j >= 0; j--) 
        {
            printf("%c", a[i][j]);
        }
        printf("\n");
    }

    
    return 0;
}


发表于 2025-02-13 21:32:50 回复(1)
/*
将二维数组作为整体进行处理,每行末尾插入换行符,
最后一行不插入换行符,最后对整个字符串逆序输出。
*/
#include <iostream> #include <algorithm> #include <string> using namespace std; string my_reverse(string s, int begin, int end){     char temp;     while(begin<end){         temp=s[begin];         s[begin]=s[end];         s[end]=temp;         begin++;         end--;     }     return s; } int main() {     int n, m;     string s, res;     cin>>n>>m;     for(int i=0; i<n; i++){         cin>>s;         res += s;         if(i!=n-1) res += '\n';     }     cout<<my_reverse(res, 0, n*m+n-2);     return 0; }

发表于 2025-03-14 14:21:33 回复(0)
n, m = map(int, input().split())
lists = []
for _ in range(n):
    string = input()
    rev_string = "".join(reversed(string))
    lists.append(rev_string)
for i in range(n-1,-1,-1):
    print(lists[i])

发表于 2024-12-02 15:27:36 回复(0)
import sys

n,m = map(int, input().split())
a = []
for i in range(0,n):
    raw = list(map(str,input()))
    a.append(raw)
for j in range(n-1,-1,-1):
    print("".join(reversed(a[j])))

发表于 2024-11-14 16:22:21 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        String[] strings = new String[n];
        for(int i = 0; i < n; i++) {
             strings[i] = in.next();
        }
        for(int i = n -1; i >= 0 ; i--) {
             System.out.println(new StringBuffer(strings[i]).reverse());
        }
    }
}
发表于 2024-10-22 22:52:01 回复(0)
import java.util.Scanner;
class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        sc.nextLine();
        char [][] a = new char[n][m];
        for(int i = 0; i<n; i++){
            String line = sc.nextLine();
            for(int j=0; j<m ;j++){
                a[i][j] = line.charAt(j);
            }
        }
       // 输出结果
        for (int i = n-1; i >= 0; i--) {
            for (int j = m-1; j >= 0; j--) {
                System.out.print(a[i][j]);
            }
            System.out.println();
        }

        sc.close();
    }
}


发表于 2024-10-20 10:52:34 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        in.nextLine();
        char[][] arr = new char[n][m];
        for (int i = n; i > 0;) {
            i--;
            String line = in.nextLine();
            int k = 0;
            for (int j = m; j > 0;) {
                j--;
                arr[i][k++] = line.charAt(j);
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }
    }
}

发表于 2024-10-08 15:42:45 回复(0)
while True:
    try:
        n, m = map(int, input().split())  # 获取二维字符数组
        a = []  # 新建数组
        # 利用循环获取数组
        for i in range(n):
            raw = input()  # 获取每行的字符串
            a.append(raw)

        # 对行和列都倒置
        for i in range(n - 1, -1, -1):  # 倒置行
            for j in range(m - 1, -1, -1):  # 倒置列
                print(a[i][j], end="")  # 输出倒置后的元素
            print()  # 换行

    except:
        break
发表于 2024-08-16 15:03:45 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int m = in.nextInt();
        char[][] c = new char[n][m];
        for (int i = 0; i < n; i++) {
            String s = in.next();
            for (int j = 0; j < m; j++) {
                c[i][j] = s.charAt(j);
            }
        }
        char[][] r = new char[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                r[i][j] = c[n-1-i][m-1-j];
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(r[i][j]);
            }
            System.out.println();
        }
    }
}

发表于 2025-04-19 10:19:05 回复(0)
import sys

n , m = map(int,input().split())
grid = [input().strip() for i in range(n)]
h = grid[::-1]
res = [l[::-1] for l in h]

for line in res:
    print(line)
发表于 2025-04-17 10:55:11 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = 0;
        int n = 0;
        if (in.hasNextInt()){
            m = in.nextInt();
        }
        if (in.hasNextInt()){
            n = in.nextInt();
        }
        char [][] a = new char[m][n];
        int i = 0;
        int j = m-1;
        while(0<m--){
            String s = "";
            if (in.hasNext()){
                s = in.next();
            }
            a[i] = s.toCharArray();
            i++;
        }
        for( ; j>=0; j--){
            for( int k = n-1; k>=0; k--){
                System.out.print(a[j][k]);
            }
            System.out.print("\n");
        }  
    }
}
发表于 2025-04-14 12:12:17 回复(0)
using System.Linq;
public class Program {
    public static void Main() {
        //获取行列数
        string[] tokens =  System.Console.ReadLine ().Split();
        int x = int.Parse(tokens[0]);
        int y = int.Parse(tokens[1]);
        string strSum = string.Empty;
        //每行字符串倒序,插入到字符串集合的前部
        for (int i = 0; i < x; i++) {
            string line = System.Console.ReadLine ();
            strSum = new string(line.Reverse().ToArray())  + strSum;
        }
        //分行输出
        int k = 0;
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                System.Console.Write(strSum[k]);
                k++;
            }
            System.Console.WriteLine();//换行
        }
    }
}

发表于 2025-04-06 14:47:05 回复(0)
n, m = map(int, input().split())
matrix = []

for _ in range(n):
    row = input()
    matrix.append(row)  

# 翻转每一行
for i,row in enumerate(matrix):
    print(matrix[len(matrix)-i-1][::-1])
发表于 2025-03-20 09:42:27 回复(0)
#include <stdio.h>
#include <stdio.h>
int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    getchar();
    char str[n*m];int index = 0;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%c", &str[index++]);
        }
        getchar();
    }
    for(int i=n-1; i>=0; i--){
        for(int j=m-1; j>=0; j--){
            printf("%c",str[--index]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-03-17 19:07:57 回复(0)
package main

import (
    "fmt"
    "bufio"
    "os"

)

func main() {
    var n, m int
    fmt.Scan(&n, &m)

    // 使用切片动态分配二维数组
    a := make([][]rune, n)
    for i := range a {
        a[i] = make([]rune, m)
    }

    scanner := bufio.NewScanner(os.Stdin)
    // 输入二维数组
    for i := 0; i < n; i++ {
        scanner.Scan()
        line := scanner.Text()
        for j,char := range line{
            a[i][j] = char
        }
    }

    // 输出二维数组的逆序
    for i := n - 1; i >= 0; i-- {
        for j := m - 1; j >= 0; j-- {
            fmt.Print(string(a[i][j]))
        }
        fmt.Println()
    }
}

发表于 2025-03-17 14:40:50 回复(0)
#include <stdio.h>
#include <stdlib.h>

char * filpOnce(int count) {
    if (count > 0) {
        char* str = malloc(sizeof(char) * (count + 1));
        if (str != NULL) {
            str[count] = 0;
            scanf("%s", str);
            char *pStart = str, *pEnd = str + (count - 1);
            while (pEnd > pStart) {
                char tmp = *pStart;
                *pStart = *pEnd;
                *pEnd = tmp;
                ++pStart;
                --pEnd;
            }
            return str;
        }
    }
    return NULL;
}

int main() {
    int countX = 0, countY = 0;
    scanf("%d %d", &countX, &countY);
    char * strList[countX];
    int count = countX;
    while (count > 0) {
        strList[count - 1] = filpOnce(countY);
        count--;
    }
    int i = 0;
    while (i < countX) {
        printf("%s\n", strList[i]);
        free(strList[i]);
        i++;
    }
    return 0;
}
发表于 2025-03-04 09:56:37 回复(0)
#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    char s[a][b];
    for (int i=0; i<a; i++) {
        for (int j=0; j<b; j++) {
            cin >>s[i][j];
        }
    }
      for (int i=a-1; i>=0; i--) {
        for (int j=b-1; j>=0; j--) {
            cout <<s[i][j];
        }
          cout <<endl;
    }
}

发表于 2025-02-12 15:28:03 回复(0)
C语言基础做法,依然需要注意换行符也属于字符,需要用到getchar(),整体思路比较好懂,结尾不要忘记换行。
#include <stdio.h>
int main() {
    int  a,b;
    scanf("%d%d",&a,&b);
    getchar();
    char  n[a][b];
    for (int  i=0;i<a;i++)
    {
        for (int  j=0;j<b;j++)
        {
            scanf("%c",&n[i][j]);
        }
        getchar();
    }
    for (int i=a-1;i>=0;i--)
    {
        for(int  j=b-1;j>=0;j--)
        {
            printf("%c",n[i][j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2025-02-07 20:41:34 回复(0)
m, n = map(int, input().split())
ans = []
for i in range(m):
    ans.append(input())
for i in range(m - 1, -1, -1):
    print(ans[i][::-1])

发表于 2024-12-04 11:33:17 回复(0)