李老师带领同学们去种树,同学们按人数恰好等分成三组.已知他们共种了312棵树,老师与学生每人种的树同样多,并且不跳过十棵.问:一共有多少个学生?请把思路和过程写清楚点.
假设每人种X棵,则(312-X)/3为整数,即:X/3为正数
又因为“老师与学生每人种的树同样多,并且不跳过十棵” 那么X只能有3种可能(3 ,6 ,9)
但104-X/3为每组所种数目,那么每组人数就是
(104-X/3)/X 化简得104/X-1/3
因为人不可能是分数,那么104/X一定为1/3的倍数
那么将6带入刚好满足!!
这样的解说还满意吗 ?》
又因为“老师与学生每人种的树同样多,并且不跳过十棵” 那么X只能有3种可能(3 ,6 ,9)
但104-X/3为每组所种数目,那么每组人数就是
(104-X/3)/X 化简得104/X-1/3
因为人不可能是分数,那么104/X一定为1/3的倍数
那么将6带入刚好满足!!
这样的解说还满意吗 ?》
温馨提示:答案为网友推荐,仅供参考
第1个回答 2008-04-08
main()
{int stuNo,j;
for(stuNo=3;;stuNo+=3)
{if((312%(stuNo+1)==0)&&(312/(stuNo+1)<=10))
{j=1;
break;
}
}
clrscr();
if(j==1)
printf("stuNo is:%d",stuNo);
else
printf("Impossible!");
}
这个程序运行后的结果是stuNo is:51
思路呢,和楼上的两位差不多。不同点在与学生数的限制条件上,学生数不一定就小于312,这样的限制条件的想法是每个人至少植树1棵。但完全有可能的几个人值一棵树,当然,现实中是很少有这种情况,但程序设计人员一定要考虑全面。所以if循环的循环终止条件我没有写,也就是循环条件永远成立。通过循环体中的break语句跳出循环。
{int stuNo,j;
for(stuNo=3;;stuNo+=3)
{if((312%(stuNo+1)==0)&&(312/(stuNo+1)<=10))
{j=1;
break;
}
}
clrscr();
if(j==1)
printf("stuNo is:%d",stuNo);
else
printf("Impossible!");
}
这个程序运行后的结果是stuNo is:51
思路呢,和楼上的两位差不多。不同点在与学生数的限制条件上,学生数不一定就小于312,这样的限制条件的想法是每个人至少植树1棵。但完全有可能的几个人值一棵树,当然,现实中是很少有这种情况,但程序设计人员一定要考虑全面。所以if循环的循环终止条件我没有写,也就是循环条件永远成立。通过循环体中的break语句跳出循环。
第2个回答 2008-04-08
#include<stdio.h>
void main()
{
int studentNumber; //studentNumber为学生个数
//下面循环,学生数是3的倍数,且小于312,所以从3开始,每次加3
for(studentNumber=3;studentNumber<=312;studentNumber=studentNumber+3)
{
if((312%(studentNumber+1)==0)&&(312/(studentNumber+1))<10)
//括号中条件(312%(studentNumber+1)==0)是因为树的棵数为整数
//(312/(studentNumber+1))是因为树的棵数小于10
printf("%d\n",studentNumber);
}
}
void main()
{
int studentNumber; //studentNumber为学生个数
//下面循环,学生数是3的倍数,且小于312,所以从3开始,每次加3
for(studentNumber=3;studentNumber<=312;studentNumber=studentNumber+3)
{
if((312%(studentNumber+1)==0)&&(312/(studentNumber+1))<10)
//括号中条件(312%(studentNumber+1)==0)是因为树的棵数为整数
//(312/(studentNumber+1))是因为树的棵数小于10
printf("%d\n",studentNumber);
}
}