//循环右移 (暴力)
#include <stdio.h>
#include <stdlib.h>
int main(){
int *A;
int n,k;
scanf("%d %d",&n,&k);
A = (int *)malloc((n+1)*sizeof(int));
for(int i = 1;i < n+1;i++)
{
scanf("%d",&A[i]);
}
for(int i = 0;i < k;i++)
{
A[0] = A[n];
for(int j=n;j>1;j--)
A[j]=A[j-1];
A[1]=A[0];
/* 下面noj过不了,上面就可以
A[0] = A[1];
for(int j = 1;j < n;j++)
A[j] = A[j+1];
A[n] = A[1];
*/
}
for(int i =1; i<n+1;i++)
{
printf("%d ",A[i]);
}
free(A);
return 0;
}
/*
//循环右移(循环队列 noj不通过)不知道为什么
#include <stdio.h>
#include <stdlib.h>
typedef struct Queue{
int front,rear;
int *data;
int N;
}Queue;
int Pop_Queue(Queue *Q){
if(Q->front == Q->rear)
{
printf("kong");
return 0;
}
int x = Q->data[Q->front];
Q->front++;
return x;
}
void Push_Queue(Queue *Q,int x){
if((Q->rear+1)%Q->N == Q->front)
{
printf("full");
return;
}
Q->data[Q->rear] = x;
Q->rear++;
}
void Circle(Queue *Q,int k){
int temp;
for(int i = 1;i<=k;i++)
{
temp = Pop_Queue(Q);
Push_Queue(Q,temp);
}
}
int main(){
Queue q;
int n,k;
scanf("%d %d",&n,&k);
q.N = n+1;
q.data = (int*)malloc((n+1)*sizeof(int));
q.front = 1;
q.rear = 1;
for(int i = 1;i<n+1;i++)
{
scanf("%d",&q.data[i]);
q.rear = (i+1)%(n+1);
}
Circle(&q,k);
for(int i = q.front;i != q.rear;i=(i+1)%q.N)
{
printf("%d ",q.data[i]);
}
return 0;
}
*/
noj11 循环右移
最新推荐文章于 2023-06-11 12:08:38 发布