CCF-CSP 201503-1画像回転

問題の説明
  回転は画像処理の基本操作であり、この問題では、画像を反時計回りに90度回転する必要があります。
  コンピュータの画像表現は行列で表すことができ、画像を回転させるには、対応する行列を回転させるだけで十分です。
入力形式入力
  の最初の行には、画像行列の行と列の数を表す2つの整数n、mが含まれています。
  次のn行にはそれぞれ、入力画像を表すm個の整数が含まれています。
出力形式
  各行にn個の整数が含まれるm行を出力します。これは、元の行列を反時計回りに90度回転した後の行列を表します。
入力例
2 3
1 5 3
3 2 4
出力例
3 4
5 2
1 3
評価のユースケースサイズと規則
  1≤n、m≤1,000、行列の数値はすべて1000を超えない非負の整数です。

問題解決のアイデア:
行列を反時計回りに回転させることは、各列の一番下の要素から最初の要素にデータを順番に入力し、元の行列を出力することと同じです。
経験のまとめ:
最初に、配列は関数に組み込まれ、送信の最後に「実行エラー」の結果が表示されました。関連する問題を検索したところ、スタックオーバーフローの問題であることがわかりました。(関数で
配列を作成すると、配列が大きすぎるとスタックがオーバーフローします)注意:配列が大きすぎる場合は、グローバル配列を作成する必要があります。スタックオーバーフローを回避します。

C ++コード:

#include<bits/stdc++.h>
using namespace std;
int ans[1000][1000]; //数组过大,应该建立为全局数组,避免栈溢出
int main() {
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++){ //每一列
		for(int j=m-1;j>=0;j--){ //每一列的最后一个到第一个依次输入数据
			scanf("%d",&ans[j][i]);
		}
	}
	for(int i=0;i<m;i++){
		printf("%d",ans[i][0]);
		for(int j=1;j<n;j++){
			printf(" %d",ans[i][j]);
		}
		printf("\n");
	}
	return 0;
}
公開された111元の記事 ウォンの賞賛2 ビュー3533

おすすめ

転載: blog.csdn.net/m0_38088647/article/details/100409838