算法比拼中
imi00网友的直接for循环法——
public class test {
public static void main(String[] args) {
int count = 0 ;
for(int i = 1; i <100; i++ )
for(int j = i + 1; j < 100; j++ )
for( int k = j + 1; k < 100; k++ )
for (int m = k + 1; m < 100; m++ )
for(int n = m + 1 ; n <100; n++ )
if(i + j + k + m + n < 100){
count++;
// System.out.println( i + " " + j + " "
// + k + " " + m + " " + n + " sum:" + (i + j + k + m + n) );
}
System.out.println(count);
}
}最直接最原始的算法:答案为455175,循环次数为71523114
wqs1106网友的改良方案
public class Test3 {
public static void main(String[] args) {
int count = 0 ;
for(int i=1;i <86;i++)
{
for(int j=i+1;j <(88-i); j++ )
{
for( int k= j+1;k <(91-i-j); k++ )
{
for (int m =k+ 1;m <(95-i-j-k); m++ )
{
for(int n = m+ 1;n <(100-i-j-k-m); n++ )
{
if(i + j + k + m + n < 100)
{
count++;
}
}
}
}
}
}
System.out.println(count);
}
}
答案为455175,循环次数为455175。
jseasidej网友的试错法
public class less100
{
public static void main(String[] args)
{
int a1,a2,a3,a4,a5;
int sum=0;
int time=0;
for(a1=1;a1 <=17;a1++)
{
for(a2=a1+1;a2 <=23;a2++)
{
if((a2*4+6+a1)> =100) break;
else
for(a3=a2+1;a3 <=31;a3++)
{
if((a3*3+3+a1+a2)> =100) break;
else
for(a4=a3+1;a4 <=46;a4++)
{
if((a4*2+1+a1+a2+a3)> =100) break;
else
{
time++;
sum=sum+(99-a1-a2-a3-a4)-a4;
}
}
}
}
}
System.out.println( "结果是 "+sum+ " 循环次数: "+time);
}
}
运行结果: 结果是455175 循环次数: 24260
jacaranda网友的递归法——比较全面的分析啊
C# code
using System;
using System.Collections.Generic;
using System.Text;
namespace Test1
{
class Program
{
static void Main(string[] args)
{
int total=0;
int num = 0;
for (int i = 1; i < 18; i++) //第一个数最大只能取到17
for (int j = i + 1; j < 24; j++) //第二个数最大只能取到23
for (int k = j + 1; k < 32; k++) //第三个数最大只能取到31
for (int l = k + 1; l < 47; l++) //第四个数最大只能取到46
{
//num++; 放到if 里面
int m = 99 - i - j - k - l;
if (m > l)
{
num++;//这里
total = total + (m - l);
}
}
System.Console.WriteLine(total);
System.Console.WriteLine(num);
System.Console.ReadLine();
}
}
}
输出:
455175 //答案
24260 //循环次数