有個n整數,儲存在陣列array中,使其前面各數順序向後移動m個位置,最後的m個數變成最前面的m個數,並輸出

時間 2021-10-26 17:56:36

1樓:匿名使用者

忘掉你的指標吧。

移動後的結果,只是array陣列的重新排列。結果:array[10]=;

最後輸出也只是將重新排列好的陣列列印出來。

假如寫成這樣:

--------------------------int array=;

move(array);//move()乾的是按要求排列陣列的活for(i=0;i<6;i++)

printf("%d",array[i]);

---------------------------是否就不存在困擾呢?

2樓:開心的平凡果

你問的這個問題是計算機專業2023年的考研題,第42題。

時間複雜度和空間複雜度都最小的一種演算法:

演算法思路:

將陣列array[n]的n個元素原地逆置,變為(array_n-1,array_n-2,...,array_m,

arry_m-1,...,array_0),然後再將前n-m個元素原地逆置(得到arry_m,array_m+1,...,array_n-1)和後m個元素原地逆置(得到arry_0,array_1,...

,array_m-1),即得到最終結果。每個資料僅需挪動兩次,所以時間複雜度為o(n);除函式引數佔用空間外,僅用2個整型變數,所以空間複雜度為o(1).

演算法實現(關鍵**):

//逆置

void reverse(int array, int left, int right)}

3樓:手機使用者

e using namespace std;

int main()

c語言有n個整數,使前面各數順序向後移m個位置,最後m個數變成最前面m個數

4樓:匿名使用者

當q=0,a[q]=a[q-1]?你猜

每次a[m]=a[m+1],與q沒關係,q根本沒有用#include

# define n 10

void main()

;int n,i;

void change(int *a,int n);

printf("原陣列為:");

for(i=0;i

c語言對於有n個整數的陣列,使其前面各數順序向後移m個位置,讓最後m個數變成最前面的m個數!

5樓:

#include

#define n 10

int main()

a[k]=temp;

}for(i=0;i

printf("%d ",a[i]);}

6樓:匿名使用者

處理這個問題的方法有好多寫法,關鍵看你是一次移動一個位置還是多個位置要是一個位置,那麼只要設一個tmp變數就好要是一次移動多個位置,那麼就要再設定一個陣列一次移動一個位置,那麼迴圈移動m次就好了,for(i=0;i

要是移動多個位置,那麼最好重新賦值一個陣列for(i=0;i

b[i+n-m]=a[i];

for(i=m;i

b[i]=a[i-m];

c語言:有n個整數的陣列,編寫程式使其前面各數順序向後移m個位置,最後m個數變成最前面m個數。

7樓:匿名使用者

#include

void main()

printf("輸入要移動的位置數:");

scanf("%d",&m);--->這句也沒錯,最好在其下加入一句:m%=10;

for(i=0;i=0;j--)

就該應在這時:s[0]=b

}for(i=0;i<10;i++)

printf("%d ",s[i]);

putchar('\n');}}

8樓:匿名使用者

/*要實現這個功能只需要改一個地方:for(j=8;j>=0;j--)將這句話中的

s[0]=b移到迴圈外面就可以了,因為這個程式中s[0]也參與運算,s[0]的原來的值將賦給後面的

s[1],迴圈體內執行s[0]=b;則過早的將s[9]的值給了s[0],導致結果錯誤,應該先移動好,再將原來s[9]的

值給s[0].除了這個以外,還有幾個可以優化的地方:for(i=0;i<10;i++)

這裡直接寫for(i=0;i<10;i++)就行了,沒必要用一個臨時變數, scanf("%d",&m);

如果使用者輸入大於10的數,那迴圈就會多做幾次,所以可以加一句m=m%10或將外層迴圈條件改為for(i=0;i

void main()

printf("輸入要移動的位置數:");

scanf("%d",&m);

for(i=0;i=0;j--)

s[0]=b;

}for(i=0;i<10;i++)

printf("%d ",s[i]);

putchar('\n');}

9樓:匿名使用者

#include

void main(void)

*(p++) = t; //把儲存的第一個值給最後p = head; //p指回第一個值m--; //完成一次迴圈,m減一

} for(i=0; i

printf("%d ", a[i]);}

10樓:匿名使用者

你新建一個陣列s'[10],使s'[(i+m)%10]=s[i],然後再把s'賦值給s,如果不是要求必須用那個方法的話這個會比較容易理解也容易做吧。

是否存在無窮個正整數(m,n 使得m 2 n 2 1整除nm

解 1 當m,n為m 1,n 1時,mn 1 m n 1 3 顯然m n 1可以整除mn,原式成立 當m,n為m 1,n 2時,mn 2 m n 1 1 1 4 6 顯然m n 1可以整除mn,原式成立 2 令當m,n取m和n,即 m m,n n時也成立,即 m n 1 mn k,k為正整數,探求當...

n個連續整數的乘積一定能被n 整除

幽水寒靈 設a為任一整數,則式 a 1 a 2 a n a n a n a n a n 而式中 a n a n 恰為c a n,a 也即是從a n中取出a的組合數,當然為整數。所以 a 1 a 2 a n 一定能被n 整除 n!1 2 3 4 n 高3你會學到的。這樣 n個連續整數的乘積一定能被n ...

輸入一個整數n 輸出n除以3的餘數

給你說說思路吧 輸入一個數用此數除以10 得餘數,再判斷是否是偶數,是記錄下來,此數為最高位,然後,用這個數除以10 是否為0,為零 則跳出,不為零則繼續 除以10 得 餘數,再判斷,然後判斷除以10 是否為0,就這樣判斷。輸入一個三位正整數,將它反向輸出。用c語言編!include main 三位...