#include<stdio.h>
void main()
{
int i,d,e,f,m,h;
int a[10]={0,1,2,3,4,5,6,7,8,9},b[10]={0,1,2,3,4,5,6,7,8,9},c[10]={0,1,2,3,4,5,6,7,8,9};
for(i=0;i<=27;i++)
{
m=0;
for(d=0;d<=9;d++)
for(e=0;e<=9;e++)
for(f=0;f<=9;f++)
{
h=a[d]+b[e]+c[f];
if(i=h)
m=m+1;
printf("%d\n",h);
}
printf("%d %d\n",i,m);
}
}
9 个解决方案
#1
if(i=h) 改为if(i==h)
C中=为赋值==为比较
C中=为赋值==为比较
#2
呵呵,楼主以后要看仔细了。
#3
for(f=0;f <=9;f++)
{
h=a[d]+b[e]+c[f];
if(i=h) // "="是付值符号, "=="才是比较符号
{ // 比较语句内部不止一条语句时,要用{}括起来
m=m+1;
printf("%d\n",h);
}
}
{
h=a[d]+b[e]+c[f];
if(i=h) // "="是付值符号, "=="才是比较符号
{ // 比较语句内部不止一条语句时,要用{}括起来
m=m+1;
printf("%d\n",h);
}
}
#4
另外,第一层循环别要:
for(i=0;i <=27;i++)
{
m=0;
for(d=0;d <=9;d++) //则连续的三层循环,只要把d=9的这一层循环完成,就已经完成了搂住想要的所有组和了
for(e=0;e <=9;e++) //最外面的i<=27的循环就没必要了阿!
for(f=0;f <=9;f++)
建议改成:
i=27;
for(d=0;d <=9;d++)
for(e=0;e <=9;e++)
for(f=0;f <=9;f++)
{
h=a[d]+b[e]+c[f];
if(i>=h)
{
m=m+1;
printf("%d\n",h);
}
}
printf("%d %d\n",i,m);
}
for(i=0;i <=27;i++)
{
m=0;
for(d=0;d <=9;d++) //则连续的三层循环,只要把d=9的这一层循环完成,就已经完成了搂住想要的所有组和了
for(e=0;e <=9;e++) //最外面的i<=27的循环就没必要了阿!
for(f=0;f <=9;f++)
建议改成:
i=27;
for(d=0;d <=9;d++)
for(e=0;e <=9;e++)
for(f=0;f <=9;f++)
{
h=a[d]+b[e]+c[f];
if(i>=h)
{
m=m+1;
printf("%d\n",h);
}
}
printf("%d %d\n",i,m);
}
#5
谢谢各位了 问题解决了 自己以后要注意了
#6
需求分析做的不到位了,
用排列组合的知识你就该知道,你的循环要进行27*10*10*10=27000次。算法复杂度上你这个程序就已经遭淘汰了……
要算概率,就该知道一共多少种组合,以及出现某个结果的次数。
我初步想法是用你要求的结果来控制算法复杂度,比如说和为5,那么第一、二、三层循环是绝对过不了5的,再如和为12,如果第一层循环过了4,那么第二、三层循环是过不了8的(同理,此时候如果第二层循环过了2,那么第三层循环不会超过6),剩下的问题你就可以自己解决了。
虽然说起来复杂了点,可是算法复杂度上要大大降低,可以提速很多的。
用排列组合的知识你就该知道,你的循环要进行27*10*10*10=27000次。算法复杂度上你这个程序就已经遭淘汰了……
要算概率,就该知道一共多少种组合,以及出现某个结果的次数。
我初步想法是用你要求的结果来控制算法复杂度,比如说和为5,那么第一、二、三层循环是绝对过不了5的,再如和为12,如果第一层循环过了4,那么第二、三层循环是过不了8的(同理,此时候如果第二层循环过了2,那么第三层循环不会超过6),剩下的问题你就可以自己解决了。
虽然说起来复杂了点,可是算法复杂度上要大大降低,可以提速很多的。
#7
谢谢 Kakabulusi 朋友 我知道我这种算法复杂度太高 肯定不能用到大型的程序当中 写这个只是实现一个简单的功能 匆匆忙忙的就没往细里想
#8
你写的程序跟你自己描述的有出入,你这个是随机抽取吗?
#9
仔细一点就ok了,:)
#1
if(i=h) 改为if(i==h)
C中=为赋值==为比较
C中=为赋值==为比较
#2
呵呵,楼主以后要看仔细了。
#3
for(f=0;f <=9;f++)
{
h=a[d]+b[e]+c[f];
if(i=h) // "="是付值符号, "=="才是比较符号
{ // 比较语句内部不止一条语句时,要用{}括起来
m=m+1;
printf("%d\n",h);
}
}
{
h=a[d]+b[e]+c[f];
if(i=h) // "="是付值符号, "=="才是比较符号
{ // 比较语句内部不止一条语句时,要用{}括起来
m=m+1;
printf("%d\n",h);
}
}
#4
另外,第一层循环别要:
for(i=0;i <=27;i++)
{
m=0;
for(d=0;d <=9;d++) //则连续的三层循环,只要把d=9的这一层循环完成,就已经完成了搂住想要的所有组和了
for(e=0;e <=9;e++) //最外面的i<=27的循环就没必要了阿!
for(f=0;f <=9;f++)
建议改成:
i=27;
for(d=0;d <=9;d++)
for(e=0;e <=9;e++)
for(f=0;f <=9;f++)
{
h=a[d]+b[e]+c[f];
if(i>=h)
{
m=m+1;
printf("%d\n",h);
}
}
printf("%d %d\n",i,m);
}
for(i=0;i <=27;i++)
{
m=0;
for(d=0;d <=9;d++) //则连续的三层循环,只要把d=9的这一层循环完成,就已经完成了搂住想要的所有组和了
for(e=0;e <=9;e++) //最外面的i<=27的循环就没必要了阿!
for(f=0;f <=9;f++)
建议改成:
i=27;
for(d=0;d <=9;d++)
for(e=0;e <=9;e++)
for(f=0;f <=9;f++)
{
h=a[d]+b[e]+c[f];
if(i>=h)
{
m=m+1;
printf("%d\n",h);
}
}
printf("%d %d\n",i,m);
}
#5
谢谢各位了 问题解决了 自己以后要注意了
#6
需求分析做的不到位了,
用排列组合的知识你就该知道,你的循环要进行27*10*10*10=27000次。算法复杂度上你这个程序就已经遭淘汰了……
要算概率,就该知道一共多少种组合,以及出现某个结果的次数。
我初步想法是用你要求的结果来控制算法复杂度,比如说和为5,那么第一、二、三层循环是绝对过不了5的,再如和为12,如果第一层循环过了4,那么第二、三层循环是过不了8的(同理,此时候如果第二层循环过了2,那么第三层循环不会超过6),剩下的问题你就可以自己解决了。
虽然说起来复杂了点,可是算法复杂度上要大大降低,可以提速很多的。
用排列组合的知识你就该知道,你的循环要进行27*10*10*10=27000次。算法复杂度上你这个程序就已经遭淘汰了……
要算概率,就该知道一共多少种组合,以及出现某个结果的次数。
我初步想法是用你要求的结果来控制算法复杂度,比如说和为5,那么第一、二、三层循环是绝对过不了5的,再如和为12,如果第一层循环过了4,那么第二、三层循环是过不了8的(同理,此时候如果第二层循环过了2,那么第三层循环不会超过6),剩下的问题你就可以自己解决了。
虽然说起来复杂了点,可是算法复杂度上要大大降低,可以提速很多的。
#7
谢谢 Kakabulusi 朋友 我知道我这种算法复杂度太高 肯定不能用到大型的程序当中 写这个只是实现一个简单的功能 匆匆忙忙的就没往细里想
#8
你写的程序跟你自己描述的有出入,你这个是随机抽取吗?
#9
仔细一点就ok了,:)