热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

求循环节

求循环节题目信息输入输出要求前置代码解答题目信息对于任意的真分数NM(0

求循环节

  • 题目信息
    • 输入
    • 输出
    • 要求
    • 前置代码
  • 解答
题目信息

对于任意的真分数 N/M ( 0 《求循环节》

输入

N M

输出

整个循环节

要求

编写一个尽可能高效的查找循环节起始点的函数: NODE * find( NODE * head, int * n )。函数的返回值为循环节的起点(即图中的指针p),n为循环节的长度。请同时提交将分数转换为小数的函数 change( int n, int m, NODE * head )

前置代码

#include
#include
typedef struct node
{ int data;
struct node * next;
} NODE;
NODE * find( NODE * , int * );
void outputring( NODE * );
void change( int , int , NODE * );
void outputring( NODE * pring )
{ NODE * p;
p = pring;
if ( p == NULL )
printf("NULL");
else
do { printf("%d", p->data);
p = p->next;
} while ( p != pring );
printf("\n");
return;
}
int main()
{ int n, m;
NODE * head, * pring;
scanf("%d%d", &n, &m);
head = (NODE *)malloc( sizeof(NODE) );
head->next = NULL;
head->data = -1;
change( n, m, head );
pring = find( head, &n );
printf("ring=%d\n", n);
outputring( pring );
return 0;
}
/* Here is waiting for you. void change( int n, int m, NODE * head ) { } NODE * find( NODE * head, int * n ) { } */

测试输入期待输出
测试用例11 3ring=1
3
测试用例21 8ring=1
NULL
测试用例329 33ring=1
87
测试用例42 7ring=6
285714
解答

void change(int n, int m, NODE *head)
{ // 2/7 = 0.285714
NODE **array;//开辟一个数组,数组的内容是链表
NODE *p = head;//将head引向p
array = (NODE **) malloc(sizeof(NODE *) * m);//开辟的数组大小为链表头节点的大小*m,此处相当于开辟了7个
for (int k = 0; k < m; k++)
array[k] = NULL;
while (n != 0)
{
if (n * 10 % m == 0)
{ //恰好整除
p->next = (NODE *) malloc(sizeof(NODE));
p->next->data = n * 10 / m;
p->next->next = NULL;
n = 0;
}
else
{ //未整除情况
if (array[n] == NULL)
{ //该余数是第一次出现
array[n] = p->next = (NODE *) malloc(sizeof(NODE));//为后续下一个节点开辟空间,
// 同时也在array数组中记录下了是否出现过这个余数
p->next->data = n * 10 / m;//下一个节点的数据为第一次的除数2
n = n * 10 % m;//n此时被改变为余数
p = p->next;//p挪向下一个节点
}
else
{ //该余数不是第一次出现,则发现循环节
p->next = array[n];
n = 0;
}
}
}
}
NODE *find(NODE *head, int *n)
{
NODE *p, *q;
p = q = head->next;//p和q均指向head
while (p != NULL && q != NULL)
{
p = p->next;
q = q->next;
if (q != NULL)//q一次向后移动两个
q = q->next;
if (p == q)
break;//找到重合点则退出
}
if (q == NULL)
{ //如果q一直指向最后还没有找到重合的点那么就不循环了
*n = 0;
return NULL;
}
int ring = 1;
while (q->next != p)
{ //求环长
q = q->next;//q走的快,让q再走回来
ring++;
}
int count = 0;
q = p = head->next;//再一次从头开始
while (count < ring)
{ //p先向前走循环节步长的长度
count++;
p = p->next;
}
while (p != q)
{ //如果pq不相等说明未找到恰好一起的地方,还在前面非循环节的位置
p = p->next;
q = q->next;
}
*n = ring;
return p;
}

推荐阅读
  • 【Linux系统编程:基础IO 下】dup2 实现输出重定向、输入重定向、追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接
    写在前面这里先接着《基础IO上》中的缓冲区的内容作些补充,这里主要补充dup2接口。✔测试用例一:#include#inclu ... [详细]
  • Linux数据链路层的包解析仅以此文作为学习笔记,初学者,如有错误欢迎批评指正,但求轻喷。一般而言,Linux系统截获数据包后,会通过协议栈,按照TCPIP层次进行解析,那我们如何 ... [详细]
  • B题:题意:博弈,二维平面上n个点,每次可以下移,左移或对角线移动任意步,将任意点移到原点即胜 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 开发笔记:googletest安装与使用
    本文由编程笔记#小编为大家整理,主要介绍了googletest安装与使用相关的知识,希望对你有一定的参考价值。简介googletest是Google公司 ... [详细]
  • 开发笔记:dice
    本文由编程笔记#小编为大家整理,主要介绍了dice相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 题目:求两个方阵A,B的乘积方阵product;分析product[i,j]是A的第i行的元素与B的第j列的元素逐个乘积作和。即:。代码实现 ... [详细]
  • 题目链接Reference:https:www.cnblogs.comdiltheyp9757781.html首先容易想到的常规dp是,初始化dp(i,j)0dp(i,j)0dp( ... [详细]
  • S3C2440 RTC实时时钟 驱动分析以及使用(三十)
    https:www.cnblogs.comlifexyp7839625.htmlRTC驱动分析总结:drivers\rtc\rtc-s3c.cs3c_rtc_in ... [详细]
  • 最近因为在准备面试,所以看了不少面试题。每个都仔细分析,争取不留死角并解决自己的所有疑惑,同时也提高编程水平。今天偶然发现对for循环语句的头部执行顺序还有一点小疑惑,虽然经常使用,但往 ... [详细]
  • POJ1942   DPaths on a Grid
    Imagineyouareattendingyourmathlessonatschool.Onceagain,youareboredbecauseyourteachertellst ... [详细]
author-avatar
奶牛还在Henry
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有