三个和数组有关的程序题目(C++)

题目一:有n个整数,使前面各数顺序向后移动m个位置

问题描述:

有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前m个数

程序代码:

#include<iostream>
using namespace std;
int main(){
    void move(int a[],int n,int m);
    int a[200];
    int n=0,m=0,i=0;
    cout<<"请输入数字的个数:";
    cin>>n;
    cout<<"\n请输入这些数字\n"<<endl;
    for(;i<n;i++){
        cin>>a[i];
    }
    cout<<"\n请输入要向后移动的位数m:";
    cin>>m;
    move(a,n,m);
    cout<<"\n移动后的数字序列为:\n"<<endl;
    for(i=0;i<n;i++){
        cout<<a[i]<<" ";
    } 
    cout<<"\n\n";
    return 0;
} 
void move(int a[],int n,int m){
    int i=0,k;
    int b[200];
    for(i=n-1;i>=0;i--){
        k=(i+m)%n;
        b[k]=a[i];
    }
    for(i=0;i<n;i++){
        a[i]=b[i];
    }
     
}


运行界面:


 

题目二:狐狸找兔子

问题描述:先建立一个数组a[100]并置初始值为0,然乎输入洞穴的数量n。 在进行循环,通过循环来模拟找洞穴的过程,所有被找到的洞穴对应的数组的值置为1,如此循环1000次。 然后将数组的前n个元素,依次判断,并输出元素值为0的数组的i。

程序代码:

#include<iostream>
using namespace std;
int main(){
    int a[100]={0};
    int i=0,k=0;
    int n;
    cout<<"请输入洞穴的数量n:";
    cin>>n;
    for(i=1;i<=1000;i++){
        k=(k+i)%n;
        a[k]=1;
        if(k==0){
            a[n]=1;
        }
    }
    for(i=1;i<=n;i++){
        if(a[i]!=1){
            cout<<"\n洞穴"<<i<<"安全"<<endl; 
       }
    }
	cout<<endl;
    return 0;
}


运行界面:

 


 

题目三:有n个人围成一圈,顺序排号。

问题描述:有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号

程序代码:

#include<iostream>
#define MAXNUM 100
using namespace std;
int main()
{
    int a[MAXNUM];
    int n=0;			//n表示一共多少人
    int m=0;			//m表示被淘汰的人数 
    int i=1;			//每轮循环中的计数器 
    int k=0;			//用来表示报数的数 
    int j=0;			//用于循环的计数器 
    cout<<"请输入总人数:";
    cin>>n;
    //对数据进行初始化操作,给每个人进行编号 
    for(j=1;j<=n;j++)
    {
        a[j]=j;		
    }
    //通过循环不断淘汰人,直到最后只剩下一个人 
    while(m < n-1)
     {
        if(a[i]!=0)	//判断该人是否已经淘汰 
       {				
            k++;		//若没有淘汰,则参与围成新圈 
        }
        if(k == 3)
        {
            a[i]=0;	//淘汰报数为3的人(即将其值设置为0) 
            k=0;		//将k置为0,重新报数 
            m++;		//对淘汰人数进行计数 
         }
        i++;		//对下一个人进行判断 
        if(i == n+1)	//到了圈子的末尾出,下一个位置将是圈子的开始 
	{
            i=1;		//将下一个人置为 1(圈子的开始位置 ) 
        } 
    } 
    for(j=1;j<=n;j++)
	{
        if(a[j]!=0)
	{
            cout<<"\n最后剩下的人原来的编号为:"<<a[j]<<" 的人\n"<<endl;
        }
    }
    return 0;
}

运行界面:

 


 

posted @ 2013-08-04 22:20  千手宇智波  阅读(563)  评论(0编辑  收藏  举报