三个和数组有关的程序题目(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;
}
运行界面:
浙公网安备 33010602011771号