翻轉陣列 C語言實現

2021-08-08 13:02:17 字數 1222 閱讀 8839

給定乙個長度為n的整數陣列a,元素均不相同,問陣列是否存在這樣乙個片段,只將該片段翻轉就可以使整個陣列公升序排列。其中陣列片段[l,r]表示序列a[l], a[l+1], ..., a[r]。原始陣列為

a[1], a[2], ..., a[l-2], a[l-1], a[l], a[l+1], ..., a[r-1], a[r], a[r+1], a[r+2], ..., a[n-1], a[n],

將片段[l,r]反序後的陣列是

a[1], a[2], ..., a[l-2], a[l-1], a[r], a[r-1], ..., a[l+1], a[l], a[r+1], a[r+2], ..., a[n-1], a[n]。

示例如下:

要考慮陣列整體是公升序的,且陣列的任意兩個元素都不相同,而且是只有乙個片段翻轉就可以完成陣列的公升序排列。只要找到第乙個降序的子串行對它進行翻轉即可,如果翻轉後陣列有序則輸出yes,否者輸出no。

#include int main()

/* 找到需要翻轉的第乙個片段的左下標 */

x = a[0];

index = 0;

for(i = 1; i < n; i++)

else break;

} /* 找到需要翻轉的第乙個片段的右下標 */

x = a[index];

index2 = index;

for(i = index + 1; i < n; i++)

else break;

} /* 將找到的這個片段的元素進行翻轉 */

for(i = index, j = 0; i <= (index2+index)/2; i++, j++)

/* 判斷是否有奇異資料點,如果沒有應該一直找到陣列最後乙個元素的下標 */

x = a[0];

index = 0;

for(i = 1; i < n; i++)

else break;

} /* 判斷是否是最後乙個元素的下標 */

if(index == n-1)

fprintf(stdout, "yes");

else

fprintf(stdout, "no");

return 0;

}

賽碼 翻轉陣列

題目描述 給定乙個長度為n的整數陣列a,元素均不相同,問陣列是否存在這樣乙個片段,只將該片段翻轉就可以使整個陣列公升序排列。其中陣列片段 l,r 表示序列a l a l 1 a r 原始陣列為 a 1 a 2 a l 2 a l 1 a l a l 1 a r 1 a r a r 1 a r 2 a...

c語言實現螺旋陣列

螺旋陣列 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 分析 這是乙個一維維度和二維維度相等的陣列arr len len 將num 1開始從arr 0 0 賦值,直到num len len結束賦值。在賦值過程中,如...

C語言實現動態陣列

include include 要使用malloc是要包含此標頭檔案 include 要使用memset是要包含此標頭檔案 intmain for i 0 i 列印陣列 free p 釋放記憶體,malloc和free一定要記得成組使用,不然會導致程式吃記憶體 getchar 讓程式停頓,觀察輸出 ...