十二个小球三次称量源代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define standard_weight 1 //定义标准球重量为1

int ball_array[13];
int unstandard_weight;
int random_num; //以随机数来确定非标准球号码

void Input();
void weigh_compare(); //模拟称量比对
int Random(); //产生随机数
int sum_height(int first_num,int last_num); //计算first_num到last_num号码的重量之和
int theHigher(int num1,int num2); //比较num1号球和num2号球谁重
int theLighter(int num1,int num2); //比较num1号球和num2号球谁轻

//按要求输入相应数据
void Input()
{
    int isInput=1;

    printf("小球编号设为1-12,以随机数方式确定非标准球的号码.\n");
    printf("通过三次称量比对可找出非标准球,并得出其轻重关系.\n");
    printf("设标准球重量为1,请输入非标准球重量(0表示轻,2表示重):\n");

    while(isInput)
    {
        scanf("%d",&unstandard_weight);
        if(unstandard_weight==0 || unstandard_weight==2)
            isInput=0;
        else
        {
            printf("请按提示输入正确的数字(0或2):");
            fflush(stdin); //刷新标准输入缓冲区,丢弃输入缓冲区里的数据
        }
    }
}

//模拟称重进行比对并得出结论
void weigh_compare()
{
    for(int i=0;i<12;i++)  //初始化各球的重量
        ball_array[i]=standard_weight;
    random_num=Random();  //产生非标准球
    ball_array[random_num]=unstandard_weight;

    //第一次称量(1,2,3,4)VS(5,6,7,8)
    if(sum_height(1,4)==sum_height(5,8)) //相等则表示非标准球在(9,10,11,12)中
    {
        //第二次称量(1,2,3)VS(9,10,11)
        if(sum_height(1,3)==sum_height(9,11)) //相等则表示(9,10,11)为标准球,那么12就是非标准球
        {
            printf("非标准球编号为12,");
            //第三次称量(1)vs(12),得出重球还是轻球
            if(theHigher(ball_array[0],ball_array[11])==ball_array[11])
                printf("且为重球\n");
            else
                printf("且为轻球\n");
        }
        //第二次称量(1,2,3)VS(9,10,11)
        if(sum_height(1,3)>sum_height(9,11)) //大于则表示(9,10,11)其中一个为非标准球,且确定为轻球
        {
            //第三次称量(9)vs(10)
            if(sum_height(9,9)==sum_height(10,10)) //相等说明11号为非标准球
                printf("非标准球编号为11,且为轻球.\n");
            else
                printf("非标准球编号为%d,且为轻球\n",theLighter(9,10));
        }
        //第二次称量(1,2,3)VS(9,10,11)
        if(sum_height(1,3)<sum_height(9,11))  //小于则表示(9,10,11)其中一个为非标准球,且确定为重球
        {
            if(sum_height(9,9)==sum_height(10,10)) 相等说明11号为非标准球
                printf("非标准球编号为11,且为重球.\n");
            else
                printf("非标准球编号为%d,且为重球\n",theHigher(9,10));
        }
    }

    //第一次称量(1,2,3,4)VS(5,6,7,8)
    if(sum_height(1,4)>sum_height(5,8)) //不相等则说明非标准球在(1,2,3,4)和(5,6,7,8)中
    {
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)==sum_height(7,9)) //相等则表示非标准球在(1,2,3)中,且确定为重球
        {
            //第三次称量(1)vs(2)
            if(sum_height(1,1)==sum_height(2,2))
                printf("非标准球编号为3,且为重球\n");
            if(sum_height(1,1)>sum_height(2,2))
                printf("非标准球编号为1,且为重球\n");
            if(sum_height(1,1)<sum_height(2,2))
                printf("非标准球编号为2,且为重球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)>sum_height(7,9)) //大于则表示非标准球在(4,7,8)中
        {
            //第三次称量(7)vs(8)
            if(sum_height(7,7)==sum_height(8,8))
                printf("非标准球编号为4,且为重球\n");
            if(sum_height(7,7)>sum_height(8,8)) //由(sum_height(1,4)>sum_height(5,8)知道为轻球
                printf("非标准球编号为8,且为轻球\n");
            if(sum_height(7,7)<sum_height(8,8))
                printf("非标准球编号为7,且为轻球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)<sum_height(7,9)) //小于则表示非标准球在(5,6)中,且确定为轻球
        {
            //第三次称量(5)vs(6)
            if(sum_height(5,5)>sum_height(6,6))
                printf("非标准球编号为6,且为轻球\n");
            if(sum_height(5,5)<sum_height(6,6))
                printf("非标准球编号为5,且为轻球\n");
        }
    }

    //第一次称量(1,2,3,4)VS(5,6,7,8)
    if(sum_height(1,4)<sum_height(5,8)) //不相等则说明非标准球在(1,2,3,4)和(4,5,6,7)中
    {
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)==sum_height(7,9)) //相等则表示非标准球在(1,2,3)中,且确定为轻球
        {
            //第三次称量(1)vs(2)
            if(sum_height(1,1)==sum_height(2,2))
                printf("非标准球编号为3,且为轻球\n");
            if(sum_height(1,1)>sum_height(2,2))
                printf("非标准球编号为2,且为轻球\n");
            if(sum_height(1,1)<sum_height(2,2))
                printf("非标准球编号为1,且为轻球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)<sum_height(7,9)) //小于则表示非标准球在(4,7,8)中
        {
            //第三次称量(7)vs(8)
            if(sum_height(7,7)==sum_height(8,8))
                printf("非标准球编号为4,且为轻球\n");
            if(sum_height(7,7)>sum_height(8,8)) //由(sum_height(1,4)<sum_height(5,8)知道为重球
                printf("非标准球编号为7,且为重球\n");
            if(sum_height(7,7)<sum_height(8,8))
                printf("非标准球编号为8,且为重球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)>sum_height(7,9)) //大于则表示非标准球在(5,6)中
        {
            //第三次称量(5)vs(6)
            if(sum_height(5,5)>sum_height(6,6))
                printf("非标准球编号为5,且为重球\n");
            if(sum_height(5,5)<sum_height(6,6))
                printf("非标准球编号为6,且为重球\n");
        }
    }
    printf("\n");
    if(unstandard_weight==0)
        printf("验证结果: 随机数为%d,您输入的数字为0.\n",random_num+1);
    else
        printf("验证结果: 随机数为%d,您输入的数字为2.\n",random_num+1);
}

int Random()
{
    int random_num;
    srand((int) time(NULL)); //把系统时间作为随机数的种子
    random_num=rand()%11; //0-11随机数
    return random_num;
}

//计算组内球的总重
int sum_height(int first_num,int last_num)
{
    int height=0;
    for(int i=first_num-1;i<last_num;i++)
        height+=ball_array[i];
    return height;
}

//计算两球中较重者
int theHigher(int num1,int num2)
{
    if(ball_array[num1-1] > ball_array[num2-1])
        return num1;
    else
        return num2;
}

//计算两球中较轻者
int theLighter(int num1,int num2)
{
    if(ball_array[num1-1] < ball_array[num2-1])
        return num1;
    else
        return num2;
}

int main(int argc, char* argv[])
{
    Input();
    weigh_compare();
}
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的带界面的窗口程序,使用C语言编写: ```c #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 WNDCLASS wc = {0}; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = "MyWindowClass"; RegisterClass(&wc); // 创建窗口 HWND hwnd = CreateWindow("MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL); // 显示窗口 ShowWindow(hwnd, nCmdShow); // 进入消息循环 MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; } ``` 这个程序创建了一个窗口,窗口的类名是"MyWindowClass",窗口标题是"My Window",窗口大小是500x500,窗口背景色是默认的白色。窗口的消息处理函数是WindowProc,在这个函数中处理了窗口关闭消息,其他消息都交给系统默认的处理函数处理。程序进入消息循环后,不断调用GetMessage函数取得消息,然后调用TranslateMessage和DispatchMessage函数处理消息,直到收到退出消息为止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值