您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“c語(yǔ)言如何實(shí)現(xiàn)數(shù)組循環(huán)左移m位”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“c語(yǔ)言如何實(shí)現(xiàn)數(shù)組循環(huán)左移m位”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
#include<stdio.h> //函數(shù)原型 void rightshiftleft(int *p_num,int n,int m); void enterint(int *p_num,int n); //主函數(shù) void main(){ int num[100] = {1,2,3,4,5},*p_num = num; int n = 5,m = 2; printf("Int =:"); scanf("%d",&n); printf("M =:"); scanf("%d",&m); //整數(shù)輸入 enterint(p_num,n); //數(shù)組左移 rightshiftleft(p_num,n,m); for(int i = 0; i < n; i++){ printf("%-5d",p_num[i]); } } //整數(shù)輸入 void enterint(int *p_num,int n){ for(;n > 0 ; n--){ scanf("%d",p_num++); } } //循環(huán)數(shù)組左移算法 void rightshiftleft(int *p_num,int n,int m){ //臨時(shí)變量 int temp = 0; //外層循環(huán)控制需要左移的次數(shù) for(int k = 0;k < m ; k++){ temp = p_num[n - m + k]; //內(nèi)層循環(huán)控制n-m的數(shù)組元素整體右移一位 for(int i = 0; i < n - m ; i++){ p_num[n -m -i+ k] = p_num[n - m -1 -i +k]; } p_num[k] = temp; } }
本題要求實(shí)現(xiàn)一個(gè)對(duì)數(shù)組進(jìn)行循環(huán)左移的簡(jiǎn)單函數(shù):一個(gè)數(shù)組a中存有n(>0)個(gè)整數(shù),將每個(gè)整數(shù)循環(huán)向左移m(≥0)個(gè)位置,即將a中的數(shù)據(jù)由(a0a1…an-1)變換為(am…an-1a0a1…am-1)(最前面的m個(gè)數(shù)循環(huán)移至最后面的m個(gè)位置)。如果還需要考慮程序移動(dòng)數(shù)據(jù)的次數(shù)盡量少,要如何設(shè)計(jì)移動(dòng)的方法?
輸入第1行給出正整數(shù)n(≤100)和整數(shù)m(≥0);第2行給出n個(gè)整數(shù),其間以空格分隔。
在一行中輸出循環(huán)左移m位以后的整數(shù)序列,之間用空格分隔,序列結(jié)尾不能有多余空格。
輸入樣例
8 3
1 2 3 4 5 6 7 8
輸出樣例
4 5 6 7 8 1 2 3
代碼如下:
#include<stdio.h> int main() { int n,m,i; scanf("%d%d",&n,&m);//獲取n和m的值 if(m>n) m=m%n;//去掉多余無(wú)意義的左移次數(shù) int a[n]; for(i=n-m;i<n;i++)//先從左移后的位置開(kāi)始存 scanf("%d",&a[i]); for(i=0;i<n-m;i++)//再?gòu)腶[0]往后存 scanf("%d",&a[i]); for(i=0;i<n;i++)//輸出數(shù)組中的各個(gè)元素 { printf("%d",a[i]); if(i!=n-1)//這樣是為了讓結(jié)尾沒(méi)有空格 printf(" "); } return 0; }
然后說(shuō)一下這題的思路,題目的要求其實(shí)就是將數(shù)組左移m位,然后輸出。
那么,我們其實(shí)可以先算出a[0]移動(dòng)后的位置就是a[n-m](如輸入樣例中的8 3,左移三位后,a[0]元素的位置其實(shí)就移動(dòng)到a[5]了),所以第一個(gè)for循環(huán)輸入的是a[m-n]到a[n-1]的值,然后第二個(gè)for循環(huán)再?gòu)腶[0]接著輸入到a[m-n-1],最后再直接輸出整個(gè)數(shù)組即可。
關(guān)于m>n的情況:當(dāng)m>n的時(shí)候,我們可以發(fā)現(xiàn),其實(shí)要左移的位置就是m%n(如n=3,m=4,其實(shí)就只需要左移4%3=1次),因?yàn)?個(gè)數(shù)左移3位還是本身,所以我們只需要在前面加一個(gè)判斷,當(dāng)m>n的時(shí)候,m=m%n就可以去掉多余無(wú)意義的左移。
讀到這里,這篇“c語(yǔ)言如何實(shí)現(xiàn)數(shù)組循環(huán)左移m位”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。