C语言趣味题

一系列C语言趣味程序设计题目,包括狼追兔子、巧夺偶数、五猴分桃等,涉及穷举法、最优解策略和数制转换等算法问题。
摘要由CSDN通过智能技术生成

问题 A: 趣味程序设计_狼追兔子

时间限制: 1 Sec  内存限制: 128 MB
提交: 341  解决: 63
[提交][状态][讨论版]

题目描述

一只兔子躲进了n个环形分布的洞的某一个中。狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中?

输入

有多组测试数据,读取到文件结尾符为止。每组测试数据输入n(2≤n≤100),即洞穴个数。输入到文件结尾符为止。

输出

兔子可能藏匿的洞。如果不止一个,按从小到大的顺序输出。如果不存在,输出空行。

样例输入

10
8
15

样例输出

2 4 7 9
 
2 4 5 7 8 9 11 12 14

提示

用一个数组a[10],对应的元素a[0],a[1],a[2]……a[9]对应表示10个洞,初值均置1。通过一个循环用“穷举法”找兔子,第n次查找对应第(n-1)%10个洞,如果在第(n-1)%10个洞中没有找到兔子,因此将数组元素a[(n-1)%10]置0值。循环完成后,检查a数组各元素(各个洞)的值,若其值仍为1,则兔子可能藏身该洞中。

#include<stdio.h>

#include<string.h>

int ok[110];

int main()

{

    int n,s,i,find;

    while(scanf("%d",&n)!=EOF)

    {

        memset(ok,0,sizeof(ok));

        for(i=1;i<=200;i++)

            if(!ok[find=(i*(i+1)/2)%n])

                if(find==0)

                    ok[n]=1;

                else

                    ok[find]=1;

        for(s=0,i=1;i<=n;i++)

            s+=ok[i];

        for(i=1,find=0;i<=n;i++)

            if(!ok[i])

            {

                if(find!=(n-s-1))

                {

                    printf("%d",i);find++;

                }

                else

                    printf("%d",i);

            }

        printf("\n");

    }

    return 0;

}

 

 

 

问题 B: 趣味程序设计_巧夺偶数

时间限制: 1 Sec  内存限制: 128 MB
提交: 174  解决: 73
[提交][状态][讨论版]

题目描述

桌子上有25颗棋子。游戏双方轮流取子,每人每次最少取走一颗棋子,最多可取走3颗棋子。双方照这样取下去,直到取光所有的棋子。于是双方手中必然一方为偶数,一方为奇数,偶数方为胜者。请编程实现人机游戏。人先走,计算机后走。若游戏结束,则输出“Gameover!”。

输入

输入人取走棋子的个数。输入一次,按一次回车。游戏不止一轮。按下文件结尾符,退出游戏。必须在完成一轮后退出游戏。不得中途退出游戏。

输出

输出计算机取走的个数,每次输出最优解。

样例输入

1
1
1
1

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值