约瑟夫环问题变形——循环数到的数中,若某一位是给定数D,则踢出此人。
2012-06-18 17:51
288 查看
这是湘大2012年6月18日程序设计实践考试的一个题目。
——————————————————————
题目描述:
每个样例占一行,为两个整数N (1 ≤ N ≤ 1000), D (0 ≤ D ≤ 9);
很可惜,当时没做出来。
下午敲了下,觉得应该是这样的,也不知道如果提交上去,会不会ac。
代码:
————————————————————————————————————————
#include <stdio.h>
#include <malloc.h>
struct data
{
int v;
struct data *next;
};//定义一个结构体,存储“人”的编号,和下个“人”的地址。
int f(int m, int a)
{
while (m)
{
if (m % 10 == a)
return 1;
m = (m - m % 10) /10;
}
return 0;
}
//判断当数到某数字m时,数字m的各个数位中,是否有数字a(0=<a<=9)。
int main()
{
int t, n, d;
int j, x;
struct data * head ,*p, *q;
scanf("%d", &t);
head = (struct data*)malloc(sizeof (struct data));
head->v = -99999;
while(t--)
{
p = q = head;
scanf("%d%d", &n, &d);
{
for (j = 0; j < n; j++)
{
q = (struct data*)malloc(sizeof (struct data));
q->v = j + 1;
p ->next = q;
p = q;
}
q->next = head->next;
}
//初始数数字的环。
q = head ->next;
j = 1;
x = 1;
while (j < n)
{
if (f(x, d))
{
p ->next = q->next;
free(q);
q = p;
j++;
}
else
{
p = q;
}
q = q->next;
x++;
}
//数数过程。
printf("%d\n\n",p->v );
}
return 0;
}
——————————————————————
题目描述:
Cycle
Description
题目描述
N个人按顺时钟围成一个圈,标号为1到N,然后从1号人从1开始按顺时钟数数。如果数到数字中含有数码D,那么这个人就退出圈子,下个人继续数下一个数,直到剩下一个人为止。输入
第一行是一个整数K,表示样例的个数。每个样例占一行,为两个整数N (1 ≤ N ≤ 1000), D (0 ≤ D ≤ 9);
输出
每行输出一个样例的结果,即最后剩下的那个人的标号。样例输入
3 5 0 5 1 5 2
样例输出
4 5 5
Sample Input
Sample Output
——————————————————————————————————————————很可惜,当时没做出来。
下午敲了下,觉得应该是这样的,也不知道如果提交上去,会不会ac。
代码:
————————————————————————————————————————
#include <stdio.h>
#include <malloc.h>
struct data
{
int v;
struct data *next;
};//定义一个结构体,存储“人”的编号,和下个“人”的地址。
int f(int m, int a)
{
while (m)
{
if (m % 10 == a)
return 1;
m = (m - m % 10) /10;
}
return 0;
}
//判断当数到某数字m时,数字m的各个数位中,是否有数字a(0=<a<=9)。
int main()
{
int t, n, d;
int j, x;
struct data * head ,*p, *q;
scanf("%d", &t);
head = (struct data*)malloc(sizeof (struct data));
head->v = -99999;
while(t--)
{
p = q = head;
scanf("%d%d", &n, &d);
{
for (j = 0; j < n; j++)
{
q = (struct data*)malloc(sizeof (struct data));
q->v = j + 1;
p ->next = q;
p = q;
}
q->next = head->next;
}
//初始数数字的环。
q = head ->next;
j = 1;
x = 1;
while (j < n)
{
if (f(x, d))
{
p ->next = q->next;
free(q);
q = p;
j++;
}
else
{
p = q;
}
q = q->next;
x++;
}
//数数过程。
printf("%d\n\n",p->v );
}
return 0;
}
相关文章推荐
- hdoj_5643 King's Game(约瑟夫环问题变种)----超时版本(自己模拟的循环链表)
- 循环链表中约瑟夫环的问题
- 用单向循环链表解决约瑟夫环(Joseph)问题
- 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序(约瑟夫环问题)
- HW输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列。
- 使用循环双链表求解约瑟夫环问题
- 构造队列问题(循环队列变形java)
- 循环链表 约瑟夫环问题实现
- (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
- C语言指针实现循环报数问题(简单约瑟夫环问题)
- 约瑟夫环问题 【循环链表的应用】
- (旋转数组问题)给定一个整数类型的循环有序数组,求循环数组的特定值,使用二分查找法(JAVA实现)
- 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序(约瑟夫环问题)
- 最近面试,被问到了一个约瑟夫环的问题,有空用循环数组写了一个
- 使用C#循环链表解决约瑟夫环的问题
- 第十课 循环链表,约瑟夫环问题的解决
- 约瑟夫环问题--循环链表
- HDU 5643 King's Game (约瑟夫环问题的变形 递推)
- 变形的约瑟夫环问题
- 循环链表与约瑟夫环问题