5月28日,北京某公司的面试题目,最后一道题目:
围着桌子座着N个人,从1编号到N,从1号开始报数,报到3的离开桌子,下一个人再从1开始报数,周而复始,直到桌子上剩下一个人为止,问最后一个人的编号是多少?
以下是我写的小程序,花了我3个小时,希望大家给我些建议,我现在刚开始学习C,也不知道将来能不能靠这个吃饭。谢谢了!!!
我的Email:haibo-try100@163.com
#include "stdio.h"
#include "malloc.h"
struct MyNode{
int num;
struct MyNode* link;
};
void init_CircleList(struct MyNode *first,int n)
{
struct MyNode *temp;
int i=0;
temp=first;
for(i=1;i<n;i++)
{
temp->num=i;
temp->link=(struct MyNode*)malloc(sizeof(struct MyNode));
temp=temp->link;
}
temp->num=n;
temp->link=first;
}
void CircleDelt(int n,struct MyNode *head)
{
struct MyNode *temp,*delenode;
temp=head;
while(temp->link->num !=n)
{
temp=temp->link;
}
delenode=temp->link;
temp->link=temp->link->link;
}
void CircleLook(struct MyNode *head)
{
struct MyNode *temp;
temp=head;
printf("现在围着桌子座的人有:\n");
printf("%d",temp->num);
temp=temp->link;
while(temp !=head)
{
printf(",%d",temp->num);
temp=temp->link;
}
putchar('\n');
}
int Caculate()
{
struct MyNode head;
struct MyNode *temp,*tp;
int totalnum=0,i=0;
printf("请输入围着桌子座的总人数:");
scanf("%d",&totalnum);
init_CircleList(&head,totalnum);
// CircleLook(&head);
temp=&head;
i=2;
while(temp->link != temp)
{
for(;i<=3;i++)
temp=temp->link;
printf("删除的人的号码为:%d\n",temp->num);
tp=temp;
temp=temp->link;
CircleDelt(tp->num,tp);
// CircleLook(temp);
i=2;
}
printf("最后剩下的人的号码为:%d\n",temp->num);
getchar();
return 1;
}
int main()
{
int choice;
while(1)
{
printf("1.Caculate the number lasted in the gived circle \n2.exit\n");
scanf("%d",&choice);
switch (choice){
case 1:
Caculate();
break;
case 2:
exit(0);
}
}
return 1;
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |