1、键盘输入x,y,求下面算数表达式的值
x+a%3*(x+y)%2/4
数据结构书上有这样的解法,是用堆栈,下次再补上。
6、已知公鸡5 元一只,母鸡3 元一只,雏鸡三只一元,问花100 元买100 只,应各有几只。
再补。
10、猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上吃前一天剩下的一半零一个。到第十天早上想吃时,见只剩下一个桃子了。求第一天摘了多少桃子。
{
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 个正整数排成一圈,编一个程序找出连续的四个数,其和是最大的(不小于圈上任何其它连续的四个数之和)。
这里只做了五个数中找两个最大数的 。人懒嘛 。
{
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 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。
{
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、将一张一元纸币兑换成一分、二分和五分的硬币,假定每种至少一枚,计算共有多少种兑换法并打印出各种兑换法。
{
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以内的全部“同构数”。
{
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 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个小运动员在参加完比赛后,口渴难耐,去小店买饮料,饮料店搞促销,凭三个空瓶可以再换一瓶,他们最少买多少瓶饮料才能保证一人一瓶?
{
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 ));
}