几个面试题请教一下

zhaoxjpig 2004-12-17 11:45:21
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, 打印出出列的顺序.
...全文
401 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
billazw 2005-04-23
  • 打赏
  • 举报
回复
什么公司出这样的题哟??
哈哈 晕了
penghongxia 2005-01-05
  • 打赏
  • 举报
回复
[第二道题目]
刚刚帮你写了一个,完全是凭兴趣,我这里没C编辑器,没调试,你自己去调试看看,应该没什么问题。


#include<stdio.h>
#define n 50;
main()
{
int i,j=0; //j 用来标志出列的数的个数
int a[n]; //n 个数用数组存放,其中a[0]没用
int m=3; //这里定m为3,你可以改成你要的数
int c=1; //C用来记a[i]的前面一个没出列的数值
a[0]=0;
do
for (i=1;i<=n;i++)
{if (a[i]<>0) //a[i]=0,说明该元素已经出列
{a[i]=c+1;
if(a[i]%m==0)
{a[i]=0; //出列的元素值用0来标志。
j++;
printf("%d\n",i);
}
else
c=a[i];
}
}
while(j<n) //j=n时,数列全部出列
}
Popo_CN 2005-01-05
  • 打赏
  • 举报
回复
/*一寺?有和尚一百,午?是一百个??,?人一个已立了?矩,雷打不?。某日??,一外来
云游和尚来??,寺主持既不想破寺内?矩,又不想破出家人允?化?的?矩,出招:全
部101个和尚排一大?圈,他?1然后向下一个方向?数,?到100者出列,取一??入?就餐,
?100的下一位(原第101)即从1?始第二??数。一百个百后肯定?剩一人,居然正是那
位云游和尚。?:初始?主持把他排在第几位?
*/
#include <stdio.h>

#define MAXCOUNT 100
#define COUNTNUM 100

struct node{
int num;
struct node *next;
};

int main(){
struct node *ph,*p1,*p2,*p3;
ph = p1 = p2 = p3 = (struct node *)malloc(sizeof(struct node));
int i;
int j = 1;
int k = 1;
/*create*/
for (i = 0;i < MAXCOUNT + 1;i++){
p1->num = i+1;
if(i != MAXCOUNT){
p2 = (struct node *)malloc(sizeof(struct node));
p2->next = NULL;
p1->next = p2;
p1 = p2;
}else{
p1->next = ph;
}
}
/*free*/
while(p3->next != p3){
if(j == COUNTNUM - 1){
struct node *pt;
j = 1;
pt = p3->next;
p3->next = p3->next->next;
p3 = p3->next;
printf("%d -->out No:%d\n",k,pt->num);
k++;
free(pt);
}else{
j++;
p3 = p3->next;
}
}

/*result*/
printf("The Result is No:%d\n",p3->num);
free(p3);
getchar();
return 0;
}
mxfeng 2005-01-04
  • 打赏
  • 举报
回复
dailiangren 2005-01-03
  • 打赏
  • 举报
回复
我解答的第一个,是用递推的想法解答的,但写起来好象是递归的形式。
我不大懂这些东西该怎么理解,期盼大家给我解疑。
# include<iostream.h>
void p(int n)
{
if(n==0) return;
for(int i=0;i<=n;i++)
cout<<" ";
for(int j=1;j<=5-n;j++)
cout<<j;
for(int k=6-n;k>=1;k--)
cout<<k;
cout<<endl;
p(n-1);
}

main()
{
p(5);
}
xiaosong8584 2004-12-21
  • 打赏
  • 举报
回复
up
aaalife 2004-12-20
  • 打赏
  • 举报
回复
晕死

这是面试题吗?考二级的都会唉~~~~~~

哪家公司,说来听听

:)
Oldman 2004-12-19
  • 打赏
  • 举报
回复
此C语言课本上去找吧
rickone 2004-12-19
  • 打赏
  • 举报
回复
第一个容易啊,用分治的思想,大问题分成若干个相似的小问题:
#include <stdio.h>
void mygraph(int n)
{
if(n==1)printf(" 1\n");
else
{
mygraph(n-1);
for(int i=1;i<=5-n;++i)printf(" ");
for(i=1;i<=n;++i)printf("%d",i);
for(i=n-1;i>0;--i)printf("%d",i);
printf("\n");
}//else
}//mygraph
void main()
{
mygraph(5);
}
aaasng 2004-12-19
  • 打赏
  • 举报
回复
第一个
#include <stdio.h>
int n = 0;
void foo(int j, int k)
{
int i;
if (k <= n)
{
for (i=0; i<j; i++)
printf(" ");
for (i=1; i<=k; i++)
printf("%d ", i);
for (i=k-1; i>=1; i--)
printf("%d ", i);
printf("\n");
foo(j-2, k+1);
}
}

void main()
{
scanf("%d", &n);
foo((n-1)*2, 1);
}
尹立 2004-12-18
  • 打赏
  • 举报
回复
第2个题目是以前学数据结构时做的第一个题目 用c语言写的 你看看吧~~
我刚刚写了注释~~要是看不懂 再告诉我
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct Note{
int i;
int j;
struct Node *next;

}NODE;

void main()
{
int i,j,n,k,m,t;
NODE *head;
NODE *p,*q,*s;

scanf("%d",&n); //输入人的个数;
head=(NODE*)malloc(sizeof(NODE));//申请一个头接点;
if(head==NULL)
{ printf("The memory is not allocated!");
return ;
}

q=head;
for(i=1;i<=n;i++) //开始输入密码;
{
p=(NODE*)malloc(sizeof(NODE));
if(p==NULL) return;
scanf("%d",&j);
p->i=i; //把编号送给人
p->j=j; //把密码送给人
q->next=p; //建立链表
q=q->next;
}
head=head->next; //清除空的头指针;
q->next=head;
p=head;
m=p->j;
for(k=1;k<n;k++) //开始循环;
{
t=1;
while(t<m) //找到所需要的位置,并把这个接点删除;然后继续往下找;
{
t++;
p=p->next;
}

s=p->next;
p->next=s->next;
m=s->j;
printf("%4d\n",s->i);
free(s);
}

printf("The lastest monkey is %d\n",p->i); //这是留下的最后的一个接点;

}
jp1984 2004-12-18
  • 打赏
  • 举报
回复
第一个用递归还真不是很容易想。
第二个就不要说了,Josephus 。。构造法 或者 递归。。。
qrlvls 2004-12-17
  • 打赏
  • 举报
回复
作业吧?
lyjpenny 2004-12-17
  • 打赏
  • 举报
回复
既然是作业就不要拿上来问了,随便找个高手搞定算啦.

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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