00-自测3. 数组元素循环右移问题 (20)

来源:互联网 发布:东方国信java工资 编辑:程序博客网 时间:2024/05/16 07:04
</pre><pre code_snippet_id="660414" snippet_file_name="blog_20150506_1_67350" name="code" class="cpp">
<h1 style="margin: 0px 0px 0.5em; padding: 0px; border: 0px; font-family: 'Droid Sans', Verdana, 'Microsoft YaHei', Tahoma, sans-serif; font-size: 3em; font-weight: normal; line-height: 1em; vertical-align: baseline; color: rgb(17, 17, 17); background-color: rgb(250, 250, 250);">00-自测3. 数组元素循环右移问题 (20)</h1><div id="problemInfo" class="rfloat" style="margin: 0px; padding: 2px; border: 1px solid rgb(221, 221, 221); font-family: 'Droid Sans', Verdana, 'Microsoft YaHei', Tahoma, sans-serif; font-size: 16px; line-height: 24px; vertical-align: baseline; float: right; text-align: center; color: rgb(51, 51, 51); background-color: rgb(250, 250, 250);"><div class="limit" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><div class="key" style="margin: 0px; padding: 0px 20px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; background-color: rgb(221, 221, 221);">时间限制</div><div class="value" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">400 ms</div></div><div class="limit" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><div class="key" style="margin: 0px; padding: 0px 20px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; background-color: rgb(221, 221, 221);">内存限制</div><div class="value" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">65536 kB</div></div><div class="limit" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><div class="key" style="margin: 0px; padding: 0px 20px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; background-color: rgb(221, 221, 221);">代码长度限制</div><div class="value" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">8000 B</div></div><div class="checker" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><div class="key" style="margin: 0px; padding: 0px 20px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; background-color: rgb(221, 221, 221);">判题程序</div><div class="value" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><span title="纯文本对比" style="margin: 0px; padding: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">Standard</span></div></div></div><div id="problemContent" style="margin: 0px; padding: 0px; border: 0px; font-family: 'Droid Sans', Verdana, 'Microsoft YaHei', Tahoma, sans-serif; font-size: 16px; line-height: 24px; vertical-align: baseline; color: rgb(51, 51, 51); background-color: rgb(250, 250, 250);"><p style="margin-top: 0px; margin-bottom: 1.5em; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A<sub style="line-height: 0;">0</sub> A<sub style="line-height: 0;">1</sub>……A<sub style="line-height: 0;">N-1</sub>)变换为(A<sub style="line-height: 0;">N-M</sub> …… A<sub style="line-height: 0;">N-1</sub> A<sub style="line-height: 0;">0</sub> A<sub style="line-height: 0;">1</sub>……A<sub style="line-height: 0;">N-M-1</sub>)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?</p><p style="margin-top: 0px; margin-bottom: 1.5em; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><strong>输入格式:</strong>每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。</p><p style="margin-top: 0px; margin-bottom: 1.5em; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;"><strong>输出格式:</strong>在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。</p><strong>输入样例:</strong><pre style="margin-top: 1.5em; margin-bottom: 1.5em; padding: 0px; border: 0px; font-family: 'Droid Sans Mono', Consolas, 'Courier New', monospace; font-size: 1em; line-height: 1.5; vertical-align: baseline; overflow: auto;">6 21 2 3 4 5 6
输出样例:
5 6 1 2 3 4

提交代码
#include<stdio.h>void MoveRight(int array[],int n,int m);int main(){int n,j,cnt;int i;scanf("%d %d",&n,&j);int arr[n];for(i=0; i<n; i++) scanf("%d",&arr[i]);MoveRight(arr,n,j);for(i=0; i<n; i++){if(i==n-1) printf("%d",arr[i]);else printf("%d ",arr[i]);}return  0;}void MoveRight(int array[],int n,int m){    int *p,array_end;    array_end = *(array+n-1);    for(p=array+n-1;p>array;p--)  *p=*(p-1);    m--;  *array =array_end;    if(m>0) MoveRight(array,n,m);}

0 0