几个面试问题请教一下

zhaoxjpig 2004-12-17 11:46:39
1. 编写一个递归函数, 使之能输出下图所示结果:
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1

2.设有n个人依次围成一圈, 从第1个人开始报数, 数到第m个人出列, 然后从出列的下一个人开始报数, 数到第m个人又出列, …, 如此反复到所有的人全部出列为止. 设n 个人的编号分别为1, 2, …, n, 打印出出列的顺序.
...全文
333 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
caocaocao81 2004-12-17
  • 打赏
  • 举报
回复
#include <iostream.h>
void main()
{
void disp(int n,int p);
int m,x,u=0;
cout<<"输入N的值:";cin>>m;disp(m,u);
cin>>x;
}
void disp(int n,int p)
{
if(n==1)
cout<<" "<<n<<endl;
else
{ cout<<" ";
disp(n-1,++p);
int k=0;
while(k<p)
{cout<<" ";k++;}
int i;
for(i=1;i<n;i++)
{cout<<i<<" ";}
for(i=n;i>0;i--)
{cout<<i<<" ";}
cout<<endl;
}
}
dudu妈 2004-12-17
  • 打赏
  • 举报
回复
2.
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
void foo(int num,int interval)
{
vector<int> myList;
int diff;
int step = 1;
if(num < 1)
{
return ;
}
for(int i = 1; i <= num; i++)
{
myList.push_back(i);
}
vector<int>::iterator Iter = myList.begin();
while(!myList.empty())
{
if(interval > myList.size())
{
diff = interval%myList.size();
}
else
diff = interval;
if((Iter+diff) > (myList.end()-1))
{
int c = myList.end() - Iter;
Iter = myList.begin() + diff -c;
}
else
Iter += diff;
cout<<"第"<<step<<"次:"<<*Iter<<endl;
myList.erase(Iter);
step++;
}
}
int main(int argc, char *argv[])
{
foo(10,11);
system("PAUSE");
return 0;
}
ahhy 2004-12-17
  • 打赏
  • 举报
回复
2.code
#include <stdio.h>

void Josephus(int a[],int n,int s,int m)
//其中s表示从第几个开始数,m表示数到第几个人(如本题的7
{
int i,j,k,tmp;
if(m==0)
{
printf("m=0是无效的参数!\n");
}

for(i=0;i<n;i++) //给数组赋初值(1~20)
a[i]=i+1;
i=s-1; //报名的起始位置(实际是数组中的位置)
for(k=n;k>1;k--) //开始查找,共进行n-1次
{
if(i==k)i=0; //如果当前人数=i,则从第一个人开始,a[0]
i=(i+m-1)%k;
if(i!=k-1) //这段表示找到一个后a[i]就与a[k-1]交换
{
tmp=a[i];
for(j=i;j<k-1;j++)
a[j]=a[j+1];
a[k-1]=tmp;
}
}
for(k=0;k<n/2;k++) //将最终得到的数组逆置就得到从第一个出去的人到最后
{
tmp=a[k];
a[k]=a[n-k-1];
a[n-k-1]=tmp;
}
}

int main()
{
int a[20];
Josephus(a,20,1,7);
printf("output is:\n");
for(int i=0;i<20;i++)
printf("%4d",a[i]);
return 0;
}
260005065 2004-12-17
  • 打赏
  • 举报
回复
#include <stdio.h>
void fun(int n, int m){
int i;
if (n>1){
fun(n-1, m+1);
}
for ( ; m>0; m--){
printf(" ");
}
for (i=1; i<=n; i++){
printf("%d", i);
}
for (i=n-1 ; i>0; i--){
printf("%d", i);
}
printf("\n");
}

int main(){
fun(5, 0);
return 0;
}
260005065 2004-12-17
  • 打赏
  • 举报
回复
void fun(int n, int m){
int *pos, i, p;
pos = (int*)malloc(n*sizeof(int));
pos[n-1] = 0;
for (i=0; i<n-1; i++){
pos[i] = i+1;
}
p = n-1;
do{
for (i=0; i<m-1; i++){
p = pos[p];
}
printf("%d ", pos[p]);
pos[p] = pos[pos[p]];
}while(p != pos[p]);
printf("%d", p);
free(pos);
}
5204711353 2004-12-17
  • 打赏
  • 举报
回复
#include <iostream.h>
int y;
void fun(int i,int *p,int n,int l)
{
if(n==y)
{
while(l)
{
cout<<' ';
l--;
}

cout<<'1';
cout<<endl;
}
else
{

fun(i-1,p,n+1,l+1);
while(l)
{
cout<<' ';
l--;
}
for(int j=0;j<=i;j++)
cout<<p[j];
j=j-2;
for(;j>=0;j--)
cout<<p[j];
cout<<endl;
}
}
int main()
{
int *p,i;
cout<<"input n:\n";
cin>>y;
p=new int[y];
for(i=1;i<=y;i++)
p[i-1]=i;
fun(y-1,p,1,0);
delete [] p;
return 0;
}
grooving 2004-12-17
  • 打赏
  • 举报
回复
2。

#include <stdlib.h>
#include <stdio.h>
#define n 15 //总人数
#define m 3 //报的号数
int main(int argc, char *argv[])
{
int a[n]; //数组,存放人
int i; //temp
//记数 //总量 //位置
int p, c , z;

for(i=0;i<n;i++)
{
a[i] = 1; //给人负值
}
z = 0; //初始化起始位置
c = n; //初始化总量
p = 1; //初始化报数
while(1) //开始
{
if( 1 == a[z]) //如果此人还活着
{
if(3==p) //如果此时号为3,则...
{
a[z] = 0; //减少一个人
c--; //总量减少

if( c == 1) //如果用量等于3
{
break; //跳出
}
}

p++; //报数
if( p == 4 )
{
p = 1;
}
}
z++; //下一个人
if( z == n ) //到了最后一个人,则从头开始
{
z = 0;
}
}
for(i=0;i<n;i++)
{
printf("%d",a[i]);
printf("%s"," ");
}
printf("%s","-------------------\n");

printf("%d",z);

system("PAUSE");
return 0;

}
dudu妈 2004-12-17
  • 打赏
  • 举报
回复
1.
#include <iostream>
#include <stdlib.h>
#include <iomanip>

using namespace std;
void foo(int n,int count = 1)
{
if(n<=0 || count <= 0)
{
cout<<"Error!"<<endl;
return ;
}
if(count <= n)
{
cout<<setfill(' ')<<setw(2*(n - count) + 1);
for(int i = 1; i <= count; i++)
cout<<' '<<i;
for(int i = count-1; i >= 1; i--)
cout<<' '<<i;
cout<<endl;
if(count == n)
{
return ;
}
else
foo(n,count+1);
}
}
int main(int argc, char *argv[])
{
foo(5);
system("PAUSE");
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧