猜猜谁是我

Problem Description
女神YSJ给Martin发了一个视频。“猜猜里面哪个是我。” 女神说。
作为一个脸盲,再加上多年不见,Martin已经完全不知道女神长成了什么样子,他表示完全认不出来。
好在Martin手上还有一张YSJ小时候的照片,他可以拿照片和视频里的人进行特征比对,从而找出女神。
为了简化问题,我们将YSJ小时候的脸表示成一个800行800列的矩阵,然后给出眼睛、鼻子、嘴巴的中心在脸上的坐标,全部用整数表示。视频中的其他人也都按照这个方式表示,截取正脸并且缩放到800x800以减小误差,输入不保证符合实际(例如不保证眼睛在鼻子的上方,鼻子在嘴巴上方blahblah。。)
Martin进行特征比对的方式相当简单粗暴:眼睛、鼻子、嘴巴中心和YSJ小时候照片的欧氏距离总和最小的就是女神。
YSJ小时候的脸部特征描述如下, 分别表示左眼、右眼、鼻子、嘴巴的中心在图中的位置(参见输入描述):
200 200
200 600
450 400
700 400

但是Martin的编程水平已经和他的表达能力一样烂到一定境界了,所以他希望聪明的你能够帮帮他。
Input
多组数据。每个人的人脸特征都用4行表示,每行两个整数x,y(0<=x,y<800) 分别表示左眼、右眼、鼻子、嘴巴的中心在图中的位置。。每一组数据先给出n (0< n<1000),表示视频中出现的脸的个数,编号从1-n,接着的n*4行给出每张脸的描述。
 
Output
对于每组数据,输出最可能是女神的脸的编号,如果有多张人脸符合要求,输出编号最小的,单独一行。
Sample Input
  
  
3 201 201 200 600 450 400 700 400 201 200 200 600 450 400 700 400 200 201 200 600 450 400 700 400
 
Sample Output
  
  
2
Hint
欧氏距离就是两个点的直线距离

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,n;
    int u,v;
    int m;
    double x,y,z;
    double min;
    int cmp[4][2]={{200,200},{200,600},{450,400},{700,400}};
    double sum[1000]={0};
    while(scanf("%d",&n)!=EOF)
    {
        memset(sum,0,sizeof(sum));
        for(i=0;i<n;i++)
        {
            for(j=0;j<4;j++)
            {
                scanf("%d%d",&u,&v);
                x=u-cmp[j][0];
                y=v-cmp[j][1];
                z=sqrt(x*x+y*y);
                sum[i]+=z;
            }
        }
        min=0x3f3f3f3f;
        u=0;
        for(i=0;i<n;i++)
        {
            if(sum[i]<min)
            {
                min=sum[i];
                u=i;
            }
        }
        m=u+1;
        printf("%d\n",m);
    }
    return 0;
}

### 关于北京理工大学C语言“猜猜我是谁”游戏实验教程 #### 实验目标 通过编写一个简单的C语言程序来实现“猜数字”的功能。此程序能够接收用户输入并判断该数字是否存在于预设的数据集中,进而猜测出用户所想的数字。 #### 预备工作 确保已安装好支持C语言编译环境,如GCC或其他兼容工具链。熟悉基本控制结构(循环、条件语句)、函数定义以及标准库中的常用API使用方法[^1]。 #### 编码实践 下面是一个基于上述需求设计的小型项目实例: ```c #include <stdio.h> #define MAX_GUESSES 7 /* 设置最大尝试次数 */ int main() { int secretNumber = 42; // 设定秘密号码为固定值42, 可根据实际教学调整 int guess; printf("欢迎来到‘猜猜我是谁’小游戏!\n"); for (int i=0 ;i<MAX_GUESSES;i++) { printf("\n请输入您认为的秘密数字:"); scanf("%d", &guess); if (secretNumber == guess){ printf("恭喜你赢了! 正确答案确实是%d.\n", secretNumber); break; } else if(secretNumber > guess){ printf("提示: 还要更大一些哦~\n"); }else{ printf("提示: 应该更小一点呢...\n"); } if(i==MAX_GUESSES-1 && secretNumber != guess){ printf("很遗憾,机会已经用完了。\n正确答案是:%d\n", secretNumber); } } return 0; } ``` 这段代码实现了一个人机交互式的简单版“猜数字”游戏逻辑,在每次运行时会给出一定的范围让玩家去猜测具体的数值是多少,并给予相应的反馈直到达到设定的最大轮次或是成功命中为止[^2]。 #### 扩展思考 为了增加趣味性和挑战度,可以在原有基础上做如下改进: - 改变`secretNumber` 的赋值方式,比如随机生成; - 添加更多互动环节,像记录最高分等; - 尝试引入图形界面GUI开发技术使应用更加直观友好;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值