世界上最复杂的程序算法有哪些?

世界上最复杂的程序算法有哪些?,第1张

Jump-pointer: 在作拆尺如LA(v,d)的时候, 如果一层一层的往上搜索很慢. 有没有可能直接跳呢? 比如我们知道LA(u,d) = LA(v,d),如果u是v的一个ancestor. 如果直接储存了LA(u,d), 并且可以在log(n)的时间"跳"到u, 那么只要log n的时间就能找到困枝LA(v,d). 这旅启个算法要用 O(n log n)的preprocess time + O(log n)的time. 每一次跳的距离是上一次的1/2倍.,[这个算法很简单的]。

好,给你一个有趣的程序,下面程序的作用是,输入一个4位数,之后将这个数分解成4个数侍缓字,并将这4个数字组合成一个最大数和一个最小数,并将两者相减,结果作为新的灶谈没4位数,重复前面的步骤,最后的结果是什么?自己测试一下。

#include <stdio.h>

void mysort(int *a, int size)

{

int i, j, k, t

for (i = 0i <size - 1++i)

{

k = i

for (j = ij <size++j)

{

if (a[k] >a[j])

k = j

}

if (k != i)

{

t = a[i]

a[i] = a[k]

a[k] = t

}

}

}

void main()

{

int num, a[4], max, min

do

{

scanf("%d", &num)/* 输入最初的4位数 */

} while (num <1000 || num >9999)

while (num)

{

/* 将4位数分解成隐纳4个独立的数字,并保存在a数组中 */

a[0] = num % 10

num /= 10

a[1] = num % 10

num /= 10

a[2] = num % 10

num /= 10

a[3] = num

/* 排序数组元素 */

mysort(a, 4)

/* 从数组的4个元素中产生最大数字和最小数字 */

max = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0]

min = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]

/* 产生新的4位数 */

num = max - min

printf("%d\n", num)

if (num == 6174)

break

}

printf("The magic number is: %d\n", num)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12357584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存