# Pattern# Output Formatting

e998 - Error

🔗 前往 ZeroJudge 原題

題目描述

題目要求輸出一個特定格式的數字序列,序列的輸出方式依賴於輸入的整數 n。對於每一行,奇數行從 n 開始遞減,偶數行從 1 開始遞增,每行輸出 n 個數字,數字之間用空格分隔。輸入多組測試資料,直到輸入為 0 時結束。

解題思路

這題主要考驗輸出格式的控制。程式碼使用迴圈來處理每一組測試資料,並使用巢狀迴圈來輸出每一行。奇數行和偶數行的輸出邏輯不同,程式碼通過 i&1 來判斷當前行是奇數行還是偶數行,並根據不同的情況輸出數字序列。read()write() 函數用於快速讀取和輸出整數。

複雜度分析

  • 時間複雜度: O(n^2 * k),其中 n 是輸入的整數,k 是測試資料組數。
  • 空間複雜度: O(1)

程式碼

#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <stdio.h>
inline int read(){
	int a(0);
	char c('0');
	while(c>='0'){
		a=(a<<3)+(a<<1)+c-'0';
		c=getchar_unlocked();
	}
	return a;
}
inline void write(int x) {
	int stk[9],*ptr(&stk[0]);
	while(x){*ptr=x%10;x/=10;++ptr;}
	while(--ptr>=(&stk[0])){putchar_unlocked(*ptr+'0');}
}
int main(){
	int n=read(),c,i,j;
	do{
		for(i=0,c=0;i<n;++i){
			if(i&1){
				c+=n;
				j=n;
				while(j--){
					write(c--);
					putchar_unlocked(' ');
				}
				c+=n;
			}
			else{
				j=n;
				while(j--){
					write(++c);
					putchar_unlocked(' ');
				}
			}
			putchar_unlocked('\n');	
		}
		putchar_unlocked('\n');
	}while(n=read());
}

Discussion