MC0109 新河妇荡杯&&MC0110 曼哈顿距离矩阵

MC0109 新河妇荡杯

题目

今有妇人河上荡杯,津吏问曰:杯何以多? 妇人曰:家有客。 津吏曰:客几何? 妇人曰:二人共饭,三人共羹,四人共肉,凡用杯六十五,不知客几何?” ——《孙子算经》

新时代,小码哥凭借自己的努力,在村里盖了一栋漂亮的双层小洋楼。为了庆祝这乔迁新居之喜,以及感谢村民们一路来的帮扶,小码哥亲自下厨,大摆筵席。

小码哥主打三道硬菜:红烧老鹅、糖醋排骨以及松子桂鱼。忙了一上午的小码哥自豪的说道:”我恰好为每a个人准备了一盘红烧老鹅,为每b个人准备了一道糖醋排骨,为每c个人准备了一道松子桂鱼。我一个上午一共做了s道菜呢!”

聪明的你能编程来推测出小码哥一共宴请了多少人吗?

格式

输入格式:

读入数据共一行,四个用空格分隔的整数:a,b,c,s,含义如题意中所示。

输出格式:

输出一个整数,表示小码哥一共宴请的人数,保证答案小于10^6。

算法思想:

     这种方法可以通过枚举的方式逐个尝试可能的解,直到找到符合条件的解为止。虽然这种方法在解空间很大的情况下可能不太高效,但对于本题给定的范围来说,可以找到正确的答案。

代码:

#include<stdio.h>
int main() 
{ 
    int a,b,c,s,t;
    scanf("%d %d %d %d",&a,&b,&c,&s);
    for(int i=0;i<1000000;i++){
        if(i/a+i/b+i/c==s&&i%a==0&&i%b==0&&i%c==0){
            printf("%d",i);
        }
    }
    return 0; 
}

MC0110 曼哈顿距离矩阵

题目

在一个平面上,两个点的曼哈顿距离是指这两个点横纵坐标差的绝对值之和,也就是说
ManhattanDist((x1,y1),(x2,y2))=∣x1−x2∣+∣y1−y2∣

小码哥在学习完曼哈顿距离之后,构造出了一个曼哈顿距离矩阵。在这个矩阵上,每个位置按照到 (0,0)(0,0) 的曼哈顿距离的从小到大依次编号,对于距离相同的位置,按照顺时针编号。这样小码哥就得到了如同下图的矩阵:

在这里 (0,0)位置的方格填了数字 0, 然后 (1,0),(0,−1),(−1,0),(0,1)的位置依次填 1,2,3,4然后以此类推。

现在小码哥给你了一个位置 (x,y),希望你计算一下 (x,y)这个位置填放的数字是多少。

格式

输入格式:

输入仅包含两个数字 x,y(∣x∣,∣y∣≤10^3),表示小码哥询问的位置。

输出格式:

输出在指定位置填放的具体数字。

算法思想:

     下面这段代码的逻辑是基于对填放数字的规律进行计算,然后根据给定的位置 (x, y) 来计算填放的数字。这段代码虽然比较复杂,但通过计算曼哈顿距离和位置所在象限,可以准确地计算出填放的数字。

代码: C语言

#include<stdio.h>
int main() 
{ 
    int a,x,y;
    scanf("%d %d",&x,&y);
    int b=fabs(x)+fabs(y);
    if(x==0&&y==0){
        a=0;
    }else{
        a=1;
        for(int i=1;i<b;i++){
            a+=4*i;
        }    
        //printf("%d",a);   
        if(x>0&&y>=0){           
            a+=(x-1);
        }else if(x>=0&&y<0){
             a+=b;
             a+=fabs((x-b));
             a-=1; 
        }else if(x<0&&y<=0){
             a+=(2*b);
             a+=fabs(x);
             a-=1;          
        }else if(x<=0&&y>0){
             a+=(3*b);
             a+=fabs((x+b));
             a-=1;         
        }
    }
    printf("%d",a);
    return 0; 
}

代码通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钻仰弥坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值