社区
C语言
帖子详情
几个面试问题请教一下
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, 打印出出列的顺序.
...全文
342
8
打赏
收藏
几个面试问题请教一下
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, 打印出出列的顺序.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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;
}
面试
中 项目遇见的难点答案_你和offer之间只差这
几个
面试
问题
!常见
面试
问题
汇总...
99%的人都会大呼“坑爹”的
面试
问题
,你真的知道该怎么回答吗?...面对这个
问题
没什么准备,结果就说了一堆诸如我学习能力强、和别人虚心
请教
问题
、工作认真负责等等一系列听起来假、大、空的话,最后...
高频
面试
问题
总结(通用)
面试
是求职过程中非常关键的一环,通常情况下,
面试
官会从以下
几个
方面对求职者进行评估:专业知识、沟通能力、团队协作能力、解决
问题
的能力以及个人价值观等。下面是一些常见的
面试
问题
及可能的回答方向。
(HR
面试
)最常见的
面试
问题
和技巧性答复
[HR
面试
] 65个最常见的
面试
问题
与技巧性答复1、请你自我介绍
一下
你自己? 回答提示:一般人回答这个
问题
过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作...
209最新100个
面试
问题
大全及答案
209最新100个
面试
问题
大全及答案 2019年入学MBA的各高校提前预
面试
已经如火如荼展开了,在此小编先预祝大家提前拿到预
面试
优秀资格。为了更好的配合大家做好
面试
准备工作,小编整理了100个经典的MBA
面试
问题
,...
Java
面试
中HR
面试
的100个
问题
,你有被问到
几个
?正解如下
尽 管这样的
问题
对一个初次
面试
的人来说不公平,回答不好的话,你也许什么都得不到,甚至还 会失去所有的东西。假如你在初次
面试
时被突然地问到这样的
问题
,只需说些如“当然有可能” 或者“我愿意考虑
一下
”之类的...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章