1.4总结

又是补题量的一天~QAQ

找东西的wxs

从前,有个叫wxs的人,他每次找东西的时候,只会到自己的右边去找东西,绝对不会返回去找,有一天,他的朋友把他的宝贝放在了一个和蜂房结构一样的地区中的某个房子里面,这个时候wxs就懵逼了,需要我们的帮助,假设wxs的位置是a,他的宝贝是b,那么让我们来编写一个程序,计算一下a走到b的所有路线吧。

其中,结构如下所示。

输入

输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。

输出

对于每个测试实例,请输出a到b的可能路线数,每个实例的输出占一行。

样例输入 复制

2
1 2
3 6

样例输出 复制

1
3

写这个题的时候,我刚开始完全没思路,只知道好像wxs只能向右走的话,那在蜂房结构的话应该是 只能上下走才能得到有关数据答案,但是,具体怎么走的,我也不太清楚,我刚开始想用深搜但是数字有点大,可能会超时,嗯,然后去看了一下别人的,据说是一个斐波拉契数列,到底是怎么看出来的,可以先用深搜再找规律,广搜后续我试试,浅浅标记一下,这一次我先赶题量为主,选择直接用别人找出来的规律递推,代码如下:

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    long long c[100];
    c[0]=1;
    c[1]=2;
    for(int i=2; i<50; i++)
    {
        c[i]=c[i-1]+c[i-2];



    }
    while(N--)
    {
        int a,b;
        scanf("%d %d",&a,&b);




        printf("%lld\n",c[b-a-1]);//刚开始一直错,原来是减反了


    }
    return 0;
}

题目描述

在我还是一个小小小的程序猿时(虽然现在还是小小的程序猿的。。。),LJY他就很聪明了,可是他怎么教我都有不会做的题。。。
有一天,我被学校指派了任务,要去zjj的m个地方买东西,惨了我这老胳膊老腿。这是LJY看到我愁眉苦脸,走了过来,拿出zjj的地图把它神奇的分为100*100的网格,使每个我要去的目的地都落在网格之中(假设每个地方都不重叠),然后他说只要你在这些网格中任意选一个,你到各个目的地的总距离就会最小,我就百思不得其解了。
同样聪明的你们,能帮我解决问题吗?求出最短总距离。(注意:因为地形复杂,只能向横纵方向行走)

输入

第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组第一行一个整数m<20,表示本组有m个目的地,下面的m行每行有两个整数0<=x,y<=100,表示某个目的地的坐标。
m行后是新一组的数据;

输出

每组数据输出到最小的距离和,回车结束;

样例输入 复制

2
3
1 1
2 1
1 2
5
2 9 
5 20
11 9
1 1
1 20

样例输出 复制

2
44

提示

设a(x1,y1),b(x2,y2),d|ab|=|x1-x2|+|y1-y2|.

代码:

#include<stdio.h>
#include<math.h>
int x[21],y[21];

int main()
{
    int n,m;
    scanf("%d",&n);
    while(n--)
    {
        int s=0;
        scanf("%d",&m);
        int min=100000;
        for(int k=0;k<m;k++)
         scanf("%d %d",&x[k],&y[k]);//输入不放一起

        for(int i=0; i<=100; i++)
            for(int j=0; j<=100; j++)
            {
                s=0;
                for(int k=0; k<m; k++)
                {

                    s+=abs(i-x[k])+abs(j-y[k]);


                }
                if(s<min)
                    min=s;


            }
            printf("%d\n",min);








    }
    return 0;
}

好不容易遇到一个一遍过的,但是我还是要让自己注意一下:

 就在这里,我在编译器里面一直出不来结果,找遍了都没发现,后来尝试把输入和求和分开才能出来,至于为什么,我现在都没想明白,可能是某些规则吧,记住小细节!

题目描述

国服元歌的傀儡丢了,要知道元歌没了傀儡就什么也不是了,他很想知道他还能不能找到他的傀儡,好心的你可以帮帮他嘛~
测试数据多组, 矩阵n ( 1 < n < 20 ) ‘.’表示可以通行,‘*’不可以通行。

输入

输入 n,和元歌所在位置(a, b),   傀儡所在位置(c,d) 

输出

如果元歌可以找到傀儡就输出Yes 否则输出No

样例输入 复制

3
...
...
...
0 0 2 2

样例输出 复制

Yes

提示

国服元歌提醒你,有多组输入哦

#include<stdio.h>
int book[21][21];
char a[21][21];
int p,q,startx,starty,tx,ty,n,flag;
void dfs(int step,int x,int y)
{

    int nextx[4]={1,0,0,-1},nexty[4]={0,1,-1,0};
    if(x==p&&y==q)
    {
        flag=1;
        return;
    }

    for(int k=0;k<4;k++)
    {
        tx=x+nextx[k];
        ty=y+nexty[k];
        if(tx<0||ty>n||tx>n||ty<0)
            continue;
        if(book[tx][ty]==0&&a[tx][ty]=='.')
        {
            book[tx][ty]=1;
            dfs(step+1,tx,ty);
            book[tx][ty]=0;
        }
    }
    return ;



}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        flag=0;
        for(int i=0;i<n;i++)
        scanf("%s",a[i]);
        scanf("%d %d %d %d",&startx,&starty,&p,&q);
        dfs(0,startx,starty);
        for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            book[i][j]=0;
        if(flag==1)printf("Yes\n");
        else printf("No\n");




    }
    return 0;
}

 又是忘记在第二组输入前进行清零了,说明清零很重要!其实这个代码用广搜会更好,嗯,之所以我用的深搜,是因为广搜忘得快差不多了,然后又去看了一遍D:

今晚又得熬夜敲代码,先喝点精神食粮:|

不要老去,不要疲沓,请热爱和翻腾,把心底的一潭死水搅个浪潮汹涌,将藏在脾胃间的那个少年拖出来,心肺复苏,让他活,去惊天,去动地。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值