第一题
编写一个函数fun,求p=m!/(n!(m-n)!)的值,其中m与n为两个正整数,且要求m>n。在main函数中调用该函数。
测试用例:
输入(第一个是m,第二个是n) | 输出 |
4 3 | 4 |
刚开始写这一题时只想着直接把结果在函数中算出来,后来才想到应该可以分开求阶乘最后再做运算
#include<stdio.h>
int fun(int m);
int main()
{
int m,n,a,b,c,d;
scanf("%d %d",&m,&n);
d=fun(m)/(fun(n)*fun(m-n));
printf("%d\n",d);
return 0;
}
int fun(int n)
{
if(n==1){
return 1;
}else{
return n*fun(n-1);
}
}
第二题
围绕着山顶有10个洞,一只兔子和一只狐狸分别住在洞里,狐狸总想吃掉兔子;一天,兔子对狐狸说:你想吃掉我有一个条件,先把洞顺序编号,你从最后一个洞出发,第一次先到第一个洞找我,第二次隔一个洞找,第三次隔两个洞找,┈,依次类推,寻找次数不限,我躲在一个洞里不动,只要找到我你就可以饱餐一顿。狐狸一想只有10个洞,寻找次数又不限,哪有找不到的呢?马上答应了条件,结果狐狸跑断了腿也没找到,请问兔子躲在哪些洞里?
测试用例:
无输入
输出(以3d%的形式输出):
2 4 7 9
这个题目的本质就是考察对求余符号的理解
#include<stdio.h>
int main()
{
//数组1~10代表十个洞,初始值为0,当狐狸进去后洞变为非零
int a[11]={0},n=1,i;
//i从0开始,即狐狸刚开始在最后一个洞里
//当循环次数足够多时,剩余的洞口即为兔子可能藏在的地方
for(i=10;n<100;n++){
a[i]=1;
i+=n;
i%=10; //i%10即下次狐狸进入的洞口
}
for(i=1;i<11;i++){
if(a[i]==0){
printf(" %d",i);
}
}
return 0;
}