时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5721 通过数: 3810
题目描述
将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。
输入
第一行为数组a的元素个数;
第二行为n个小于1000的正整数。
输出
平移后的数组元素,每个数用一个空格隔开。
输入样例
10
1 2 3 4 5 6 7 8 9 10
输出样例
2 3 4 5 6 7 8 9 10 1
#include<bits/stdc++h>
using namespace std;
int n,i,a[10000];
int main(){
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=2;i<=n;i++)
cout<<a[i]<<" ";
cout<<a[1];//先输出a[2]到a[n],再输出a[1]
return 0;
}dim a(2) as integer
dim tmp as integer
a(0)=1
a(1)=2
a(3)=3
tmp=a(0)
a(0)=a(3)
a(3)=tmp
以上将第三个元素移动到第一个元素。这个是用集合类写的,建议你多用集合类少用数组,从整个Java的api上来看,对集合类的支持要好于数组
Josephus(1, 9, 5) 这个构造方法的意思 从第1个人开始报数,一共9个人,数到5的人出列
用了一个Iterator,不用也可以
List选用了LinkedLisk,用ArrayList或Vector也可以
没有仔细想,有问题再交流
import javautilIterator;
import javautilLinkedList;
public class Main {
public static void main(String[] args) {
Josephus test = new Josephus(1, 9, 5);
for (Integer i : test) {
Systemoutprintln(i);
}#include <stdioh>
#define N 5
void fun(int a[]){
int i,t;
t=a[0];
for(i=0;i<N-1;i++)
a[i]=a[i+1];
a[N-1]=t;
}
void main(){
int i,a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
fun(a);
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
先用循环输入九个元素,然后,使用两次循环,每次循环把最后一个元素保存,以后把其余元素一滞后一,最后把把最后元素放到第一位,这样 *** 作两次就可以了。
#include<stdioh>
int main()
{ int i,j,k,t,a[10];
for(i=0; i<9; i++)
scanf("%d",&a[i]);
for(j=0; j<2; j++)
{ t=a[8];
for(k=8; k>0; k--)
a[k]=a[k-1];
a[0]=t;
}
for(i=0; i<9; i++)
printf("%d ",a[i]);
}
void fun(int w, int p, int n){ //只需要完成此部分功能即可
int b[N],i,j;
for(i = 0; i <= p;i++)
{
b[i] = w[i];
}
for(i = 0; p+1+i < n;i++)
{
w[i] = w[p+1+i];
}
for(j = 0;j <= p;j++)
{
w[i++] = b[j];
}
}先把要取出来的数保存到一个变量里面,然后使用循环把2到这个数前一个位置的数都向后移动一位,最后把刚才保存的数存放在第2个位置,就是这三步。
下面的代码把数组a的第n个元素移动到m处,使用循环变量i、中间变量x:
第一步:
x=a[n];
第二步:
i=n;
while (i!=m){
if (n>m) a[i]=a[--i]; else a[i]=a[++i];
}
第三步:
a[m]=x;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)