1、键盘输入x,y,求下面算数表达式的值
x+a%3*(x+y)%2/4
数据结构书上有这样的解法,是用堆栈,下次再补上。
6、已知公鸡5 元一只,母鸡3 元一只,雏鸡三只一元,问花100 元买100 只,应各有几只。
再补。
10、猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上吃前一天剩下的一半零一个。到第十天早上想吃时,见只剩下一个桃子了。求第一天摘了多少桃子。
int fun(int n)
{
int total=0;
if(n==1)return 1;
return total+2*fun(n-1)+1;
}
main()
{
clrscr();
printf("%d",fun(10));
}
16、一堆鸡蛋,3个3个数剩余2个,5个5个数剩余1个,7个7个数剩余3个,问这堆鸡蛋最少有多少个?
再补。
21、由20 个正整数排成一圈,编一个程序找出连续的四个数,其和是最大的(不小于圈上任何其它连续的四个数之和)。
这里只做了五个数中找两个最大数的 。人懒嘛 。
void fun(int a[],int n)
{
int i,max[2]={0,0};
for(i=0;i<n;i++)
if(max[0]<(a[i]+a[(i+1)%n]))
{
max[0]=a[i]+a[(i+1)%n];
max[1]=i;
}
printf("%d=%d+%d",max[0],a[max[1]],a[(max[1]+1)%n]);
}
main()
{
int a[]={6,2,3,4,5};
clrscr();
fun(a,5);
}
23、josephus问题,一群孩子围成一圈,任意假定一个数m从第一个小孩起顺时针方向数,每数到第m个小孩时,该小孩离开。小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是获胜者。究竟获胜的是第几个小孩。
再补。
27、编写最大公约数最小公倍数函数
最大公约数:
int fun(int x,int y)
{
int temp;
if(x<y)
{
temp=x;
x=y;
y=temp;
}
if(x%y==0)return y;
if(x%y==1)
return 1;
else
return fun(y,x%y);
}
main()
{
clrscr();
printf("%d",fun(77,33));
}
28、已知如下与计算圆周率π有关的公式:
π/4 = 1 - 1/3 + 1/5 -1/7 + 1/9 - …
编一个程序计算π的近似值。精度要求:
(1)计算200 项得到的近似π;
(2)要求误差小于0.000001 的π的近似值。
(2)编写一个求π的函数,以最小误差为参数。
递归,关键是注意精度问题。
29、编写程序输出所有的水仙花数。所谓水仙花数是指一个三位数,其各位数的立方和等于该数。例如:153=1+125+27。
void find()
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=i%100/10;
c=i%10;
if(i==(a*a*a+b*b*b+c*c*c))
printf("%d=%d(%d^3)+%d(%d^3)+%d(%d^3) ",i,a*a*a,a,b*b*b,b,c*c*c,c);
}
}
main()
{
clrscr();
find();
}
不知道还有没有最佳解。
30、将一张一元纸币兑换成一分、二分和五分的硬币,假定每种至少一枚,计算共有多少种兑换法并打印出各种兑换法。
fun()
{
int x,y,z,i=1;
for(x=1;x<100;x++)
for(y=1;y<50;y++)
for(z=1;z<20;z++)
if(100==(x+2*y+5*z))
{
printf("%d:100=1*%d+2*%d+5*%d ",i++,x,y,z);
}
}
main()
{
fun();
}
31、“同构数”是指这样的整数:它恰好出现在其平方数的右端。如:376*376=141376。请找出10000以内的全部“同构数”。
void fun(int n)
{
long int i;
int num=1;
for(i=4;i<=n;i++)
{
if(i<10&&(i*i-i)%10==0)
printf("%d:%ld,%ld ",num++,i*i,i);
else if(i<100&&(i*i-i)%100==0)
printf("%d:%ld,%ld ",num++,i*i,i);
else if(i<1000&&((i*i-i)%1000==0))
printf("%d:%ld,%d ",num++,i*i,i);
else if(i<10000&&((i*i-i)%10000==0))
printf("%d:%ld,%d ",num++,i*i,i);
}
}
main()
{
clrscr();
fun(10000);
}
32、 有12 人围坐成一圈(假设他们的编号沿顺时针方向依次为1 到12)。编程序,使用数组来存放各数据(人员编号),而后从1 号人员开始数起(沿顺时针方向),当数到k 时(其中k>1 由用户通过cin 输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1 开始数起,数到k 后,淘汰第2 个人;如此继续,直到最后剩下一个人时停止。请输出最后所剩那一个人的编号。
用循环链表应该是最好的解决办法,数据库知识快忘得差不多了,复习好了再写这个。
33、对一批编号为1-100全部开关朝上(开)的灯进行以下操作:
凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关...一直到100
问:最后为关熄状态的灯的编号。
int turn(int n)
{
int i,res=0;
for(i=1;i<=100;i++)
{
if(n%i==0)
res=(res+1)%2;
}
return res;
}
fun()
{
int j=0,i,a[100];
for(i=0;i<100;i++)
a[i]=1;
for(i=0;i<100;i++)
{
if(turn(i+1))
a[i]=0;
else
{
a[i]=1;
j++;
}
}
for(i=0;i<100;i++)
printf("%3d:%d ",i+1,a[i]);
printf(" Total on is:%d",j);
}
main()
{
clrscr();


fun();

}
34、27个小运动员在参加完比赛后,口渴难耐,去小店买饮料,饮料店搞促销,凭三个空瓶可以再换一瓶,他们最少买多少瓶饮料才能保证一人一瓶?
int fun(int n)
{
if(n<3)return 0;
return n/3+fun(n%3+n/3);
}

main()
{
int i ;
clrscr();
for(i=1;i<27;i++)
{
if((i+fun(i))>=27)
{
printf("BearCount:%d,Total:%d ",i,i+fun(i));
break;
}
}
printf(" %d",fun(i));
}