下一段代码显示低于100的正整数使用Collatz算法到达第一个1所需的步骤数:
#include <stdio.h>
int main ()
{
int i, num;
int pasos;
for(i=2;i<=100;i++){
pasos=0;
num=i;
while(num!=1){
if(num%2 == 0){
num = num/2;
pasos=pasos+1;
}
else
{
num = num*3 + 1;
pasos=pasos+1;
}
}
printf("\n");
printf("El numero de pasos para llegar a 1 desde %i fueron: %i",i,pasos);
}我知道97是低于100的数字,需要最大的步骤(118)才能到达前1,但是我如何使程序显示这个最大的数字而不是在程序输出中寻找它呢?我希望你能理解,英语不是我的第一语言。谢谢!
发布于 2014-11-27 19:12:08
例如,作为收集最大数目的一种方法,您可以简单地在ternary循环之后添加一个while表达式:
#include <stdio.h>
int main () {
int i=0, num=0;
int pasos=0, maxpasos=0;;
for (i = 2; i <= 100; i++) {
pasos = 0;
num = i;
while (num != 1) {
if (num % 2 == 0) {
num = num / 2;
pasos = pasos + 1;
}
else {
num = num * 3 + 1;
pasos = pasos + 1;
}
}
maxpasos = (pasos > maxpasos) ? pasos : maxpasos;
printf ("\n");
printf ("El numero de pasos para llegar a 1 desde %i fueron: %i", i,
pasos);
}
printf ("\n\nMaxpasos : %d\n\n", maxpasos);
return 0;
}输出:
./bin/collatzmax
El numero de pasos para llegar a 1 desde 2 fueron: 1
El numero de pasos para llegar a 1 desde 3 fueron: 7
El numero de pasos para llegar a 1 desde 4 fueron: 2
(snip)
El numero de pasos para llegar a 1 desde 99 fueron: 25
El numero de pasos para llegar a 1 desde 100 fueron: 25
Maxpasos : 118如果您还需要在i发生时存储它,只需添加一个变量int imax=0;,然后当您存储maxpaso时,也可以存储imax=i;。示例:
int i=0, num=0, imax=0;
...
// maxpasos = (pasos > maxpasos) ? pasos : maxpasos;
if (pasos > maxpasos) {
maxpasos = pasos;
imax = i;
}输出:
Maxpasos (at 97): 118https://stackoverflow.com/questions/27176536
复制相似问题