社区
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, 打印出出列的顺序.
...全文
389
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;
}
面试
中
几个
重要的
问题
本文列举了
面试
中常见的
几个
关于项目的
问题
,包括项目介绍、改进点及遇到的技术难题,这些
问题
的回答将直接影响
面试
结果。
几个
面试
问题
本文分享了大疆、字节跳动、Intel等知名企业的软件测试岗位
面试
经历,包括
面试
流程、提问内容及工作分析,适合准备应聘软件测试职位的读者参考。
最近被
面试
了
几个
问题
,现总结如下:
本文总结了项目经理
面试
中常见的
几个
问题
及解答,包括如何应对突然增加的工作量、如何培养新人、如何处理客户不合理要求等,为即将参加
面试
的朋友提供参考。
面试
中的
几个
小
问题
本文详细解析了C语言
面试
中常见的
几个
问题
,包括STL中的list封装、重要C函数实现(如memset、memcpy、memmove和strcpy)、字符串操作函数strcat和strlen、以及递归方法实现将整数倒序输出的函数。文章提供了这些函数的实现代码,并对相关概念进行了补充说明。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章