社区
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, 打印出出列的顺序.
...全文
333
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写文章
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;
}
软件测试经典
面试
题剖析
课程简介:本课程专为
面试
踩坑者设计,直击
面试
痛点。课程内容囊括13个最常见的
面试
问题
,覆盖技术面及人事面。课程切入真实
面试
场景,以
面试
官、应聘者的角度开展,示例满分回答。并辅以
面试
题型总结。让你
面试
高效避坑,录用无忧! 课程特点:贴合实际:囊括13个最常见的
面试
问题
,覆盖技术面及人事面,直击
面试
痛点趣味实用:以
面试
官、应聘者的角度一问一答的形式开展,示例满分回答,并辅以题型总结高效精讲:每个知识点覆盖企业主流的
面试
场景,以最少的时间实现最高的学习效率原创教程:柠檬班老师倾力打造
面试
中 项目遇见的难点答案_你和offer之间只差这
几个
面试
问题
!常见
面试
问题
汇总...
99%的人都会大呼“坑爹”的
面试
问题
,你真的知道该怎么回答吗?记得第一次
面试
的时候,
面试
官对简历也很满意,前面都聊的好好的,最后问了一句简历上没有的内容:你的职业规划是什么?我一愣,脱口而出:当上CEO,赢取白富美,走上人生巅峰!
面试
官追问道:那你准备怎么做去实现你的目标呢?面对这个
问题
没什么准备,结果就说了一堆诸如我学习能力强、和别人虚心
请教
问题
、工作认真负责等等一系列听起来假、大、空的话,最后...
(HR
面试
)最常见的
面试
问题
和技巧性答复
[HR
面试
] 65个最常见的
面试
问题
与技巧性答复1、请你自我介绍
一下
你自己? 回答提示:一般人回答这个
问题
过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。
209最新100个
面试
问题
大全及答案
209最新100个
面试
问题
大全及答案 2019年入学MBA的各高校提前预
面试
已经如火如荼展开了,在此小编先预祝大家提前拿到预
面试
优秀资格。为了更好的配合大家做好
面试
准备工作,小编整理了100个经典的MBA
面试
问题
,部分
问题
附上了参考回答,供大家借鉴。
面试
问题
大全及答案(一):
问题
1:你最大的长处和弱点分别是什么这些长处和弱点对你在企业的业绩会有什么样的影响? 分析:这个...
Java
面试
中HR
面试
的100个
问题
,你有被问到
几个
?正解如下
前言 尽管在某些初次
面试
中,你也许会被问到许多像这种能代表你利益的
问题
。尽 管这样的
问题
对一个初次
面试
的人来说不公平,回答不好的话,你也许什么都得不到,甚至还 会失去所有的东西。假如你在初次
面试
时被突然地问到这样的
问题
,只需说些如“当然有可能” 或者“我愿意考虑
一下
”之类的话。 后来,如果你得到了这份工作,你会知道具体的工作条 件,然后决定你是否愿意接受这个职位。记住,在提供工作阶段,你有大部分的谈判权利,而 且雇主也许会很愿意为你提供你所需要的东西。如果那些不成
问题
,你也许会想说明
一下
,经 过重新考虑,你
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章