鸡兔同笼随机数瞎蒙的实现 2014-08-26

今天C语小测验,这个思路还被老师批判了一番=.=

产生一个疑问:这个程序我循环10W次,如果在CMD里把每次循环的结果都显示出来,就得大约用半分钟的时间。如果我不printf每次的结果,大概3秒钟就能出最后的答案。

是CMD里的刷新速度有限制吗?有啥办法能既显示数据又能充分利用CPU的能力?

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//实验多少次
#define TIME 100000
//是否显示每次试验的数据
#define ECHO 0

void calculate_average(int*, int, int*);

int main()
{
    int rabbit, chick;
    int i; //每次试验蒙的次数
    int* count = malloc(sizeof(int)*TIME); //count指针
    int times = 0; //试验的总次数
    int* count_first = count; //记录count的最初地址

    srand((unsigned)time(NULL));

    while(1)
    {
        rabbit = rand()%36;
        chick = rand()%36;
        i++;

        if (35 == rabbit + chick && 94 == rabbit * 2 + chick * 4)
        {
                if (1 == ECHO)
                {
                    printf("%-4d次瞎蒙,得出兔子有%d个,鸡有%d枚,程序走了%d次\n",i,rabbit,chick,times);
                }

                *count = i; //把当前试验的次数保存到count
                count++;
                times++;
                i = 0;
                    while (TIME == times)
                    {
                        goto break_all; //跳出大循环
                    }
        }
    }
    break_all:

    calculate_average(count, times, count_first);

    return 0;
}

void calculate_average(int * count, int times, int* count_first)
{
    int sum = 0;
    int j;

    for (j = 0; j < times; j++)
    {
        sum += *count_first;
        count_first++;
    }
    printf("经过了%d试验,每次平均瞎蒙了%5d次\n",times,sum/times);
}
时间: 2024-11-06 03:37:22

鸡兔同笼随机数瞎蒙的实现 2014-08-26的相关文章

C/C++算法竞赛入门经典Page9 例题1-4 鸡兔同笼

题目:鸡和兔总数:n,总腿数:m.输入n,m,输出鸡和兔分别的数量;无解则输出"No answer" 样例输出1: 14 32 样例输出1: 12 2 样例输入2: 10 16 样例输出2: No answer 首先,声明两个变量n,m对应总数和总腿数;再声明两个变量为鸡和兔各自的数量a,b 1 int n,m,a,b; 输入n,m: scanf("%d%d",&n,&m); 通过联立方程组: a+b=n 2a+4b=m 得: a=(4n-m)/2;

鸡兔同笼

鸡兔同笼 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 已知鸡和兔的总数量为n,总腿数为m.输入n和m,依次输出鸡和兔的数目,如果无解,则输出"No answer"(不要引号). 输入 第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10) a行里,每行都有一个n和m.(0<m,n<100) 输出 输出鸡兔的个数,或者No answer 样例输入 2 14 32 10 16 样例输出 12 2 No answer #inc

java求鸡兔同笼问题

import java.util.Scanner; public class jitutonglong { static int j,t; public static int qiongju(int head,int foot) { int re,x,y; re=0; for(x=0;x<=head;x++) { y=head-x; if(x*2+y*4==foot) { re=1; j=x; t=y; } } return re; } public static void main(Strin

1109: 零起点学算法16——鸡兔同笼

1109: 零起点学算法16--鸡兔同笼 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 4456  Accepted: 1355[Submit][Status][Web Board] Description 鸡和兔关在同一笼子中,已知总数量n和腿的总数量m,求鸡的数量和兔的数量. Input 输入2个整数分别是n和m(多组测试数据) Output 输出鸡的数量和兔的数量,中间用空格隔开,如果无解则

鸡兔同笼问题多解

还记得有一期跑男里有过一道关于鸡兔同笼的问题,说鸡兔同笼,一共有35个头,94条腿,问鸡有多少只?兔有多少只? 今天突发奇想的想用最近学的java知识做一下这道题,当然,题的结果我是笔算出来的,为了印证输出的正确与否,不多说了,直接上码: 其实从前后顺序看会发现,代码越来越简单,最后甚至都放弃使用循环来完成,完全变成了一个数学公式,但当时自己刚做的时候,我足足死扣了两个小时才清楚了思路,再之后的几个就比较轻松地做出来了. 思路很重要,想要自主完成一个东西一定要有清晰的思路,这只是个非常简单的题目

java-第六章-for-解决鸡兔同笼问题

public class A01 { public static void main(String[] args) { // TODO Auto-generated method stub for (int i = 0; i < 35; i++) { int Rabbit = 35 - i; if (i * 2 + Rabbit * 4 == 94) { System.out.println("鸡:"+i + "\t兔子" + Rabbit); } } } }

(c语法百题37)鸡兔同笼

内容: 鸡兔同笼中头的总数,脚的总数,求鸡兔各多少只 输入说明: 一行两个整数分别表示头.脚总数(保证有解,当然有可能解为0) 输出说明: 一行两个整数,分别表示鸡.兔的只数 输入样例: 若题目没有特别说明,则应该以多组测试数据方式读取,或者参考a001. 20 40 输出样例 : 20 0 #include <stdio.h> int main() { int a,b,x,y; scanf("%d%d",&x,&y); for (a=0;a<1000

程序设计导引及在线实践 读书笔记2.1 —— 鸡兔同笼

http://blog.csdn.net/pipisorry/article/details/36433305 问题描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外).已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物. 输入 第1行是测试数据的组数n,后面跟着n行输入.每组测试数据占1行,每行一个正整数a (a < 32768) 输出 输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开

Open Judge 2750 鸡兔同笼

2750:鸡兔同笼                                                                                                   总时间限制:1000ms                                                                                                   内存限制:65536kB 描述 一个笼子里面关了鸡和兔子(鸡有