学习日记12/28(今日平平无奇,无趣啊)

编程入门 行业动态 更新时间:2024-10-24 17:25:04

学习日记12/28(今日平平无奇,<a href=https://www.elefans.com/category/jswz/34/1742555.html style=无趣啊)"/>

学习日记12/28(今日平平无奇,无趣啊)

开头的话先来点oj,快乐一下。

一个微调密码锁是这样的一种锁,这种锁你仅能转动密码盘。这是一种常见的密码盘,通过仅在允许的组中改变这些密码盘以微调某个值。
设想一行有D个编号的密码盘,每个密码盘顺序有0到9共九个数字。这类似于密码箱的组合锁。
下面是一系列B按钮,每个按钮标记有D位数字。例如,D可能是4标记就是1000 1200 1002 0111.按标记为1000的按钮,则仅转动第一个转盘一次,而其他转盘不动,而按按钮1002则转第一个转盘一次,转第四个转盘两次,剩下的不动。每个盘按循环的方式转动,即如果转到9,再转一次,就又转回0.
你的任务是模仿这样一个上锁的微调密码锁,给出最终的各密码盘的读数。

输入

输入的每个测试数据的第一行包含有D个数字(至多10个),表示密码盘的起始位置。接下来的每一行有一排有标记的按钮,表示下一次会按的按钮。

输出

对每个测试用例用一行输出最终各密码盘的读数。

样例输入 复制

0001
1003
0206
0034
1111
1003

样例输出 复制

3348

 这一看下去难免有点迷糊,因为题目少了点东西,我就不打哑谜,首先输入一串数代标了有几个密码盘,也表示密码盘的初始位置如0001,表示有4个密码盘初始的位置如0 0 0 1.然后5行和上面位数一样的数字如1003,0206.ok题目补充完整。补完之后就是一简单的小家伙了。看我乾坤一码!

#include<stdio.h>
#include<string.h>
int f(char x[],int a,int h){int u=h-1;//让x[]从最后的盘子开始转while(a>0){//我是把后面的数用整型来处理的,取最后一位处理,是从最后的密码盘对应的。x[u]=x[u]+a%10;if(x[u]>57)x[u]=x[u]-10;u--;a/=10;//把它除以10把用过的个位去掉。}return 0;
}int main()
{    int n;char a[10];while(~scanf("%s",a)){for(int k=0;k<5;k++){scanf(“%d",&n);int h=strlen(a);//你的密码盘有几个(字符串的长度)f(a,n,h);}
printf("%s\n",a);//最后把处理完的数据输出}return 0;
}

思路有很多的,不过其实把as码理解更多的话可以写的更好,下一个,下一个。

给定一个长度为n的序列a,并且序列a中的元素只由1或0构成
你可以执行一种操作,选定序列a中的一个元素a[i],使得a[i]=1-a[i]
最后你可以得到一个x和一个y
    x:序列a中连续1的最长序列长度
    y:操作次数
要求你求出最大的x-y

输入

第一行给定一个t(1<=t<=1e3),表示有t组样例
对于每一组样例,总共有两行
第一行给定一个n(1<=n<=1e5),表示序列a的长度
第二行给定n个元素,表示序列a

输出

最大的x-y

样例输入 复制

2
3
1 0 1
5
0 1 0 1 0

样例输出 复制

2
2

提示

对于第一组样例,我们可以对a[2]执行操作,序列a修改为{1 1 1},x=3,y=1  最终x-y=2
对于第二组样例,我们可以对a[3]执行操作,序列a修改为{0 1 1 1 0},x=3,y=1    最终x-y=2

看了题目是不是觉得有点迷糊,觉得要用啥高级得方法去搞定这道题目,no no no,把题目多看几遍你就可以发现其中得奥妙,你需要找x吗?no 你要找y吗? no,都不用,为什莫不用?,就自己去想不然就没意思了啊。上码!

#include<stdio.h>
#include<string.h>
int main()
{int k[100000],n,i;scanf("%d",&n);for(int j=0;j<n;j++){scanf("%d",&i);for(int h=0;h<i;h++)scanf("%d",&k[h]);int y=0;for(int m=0;m<i;m++){if(k[m]==0)y++;}printf("%d\n",i-y);}return 0;
}

算了怕你是个呆呆姬,我就大发慈悲的告诉你吧。很显然每次操作应该是把0变成1,但y会加1所以你变的1要是被记上到了x也会减掉那就是说你就是把全部的0变成1也没问题,然后你发现那数组变成了全是1数组有多长那x就多大,减去你处理的次数就好了呀,这一定是最大的。直接从整个下手,管他细枝末节,杀就完了。 

来个对我来说有点狠的!!!

int check(参数)
{if(满足条件)return 1;return 0;
}void dfs(int step)
{判断边界{相应操作}尝试每一种可能{满足check条件标记继续下一步dfs(step+1)恢复初始状态(回溯的时候要用到)}
}   

这是我从网上看到的一个搜索的基本模板,这样一看难以理解。那就来点实战的演练。

题目描述

给定一个 N \times MN×M 方格的迷宫,迷宫里有 TT 处障碍,障碍处不可通过。

在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。

输入格式

第一行为三个正整数 N,M,TN,M,T,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 SX,SY,FX,FYSX,SY,FX,FY,SX,SYSX,SY 代表起点坐标,FX,FYFX,FY 代表终点坐标。

接下来 TT 行,每行两个正整数,表示障碍点的坐标。

输出格式

输出从起点坐标到终点坐标的方案总数。

输入输出样例

输入 #1复制

2 2 1
1 1 2 2
1 2

输出 #1复制

1

说明/提示

对于 100\%100% 的数据,1 \le N,M \le 51≤N,M≤5,1 \le T \le 101≤T≤10,1 \le SX,FX \le n1≤SX,FX≤n,1 \le SY,FY \le m1≤SY,FY≤m。

典型的题目了,来上码!

#include<stdio.h>
#include<string.h>
int b[6][6]={0},x=0;//地图,路线的数量
int map[6][6]={0};//搞标记的地图
int a3,a4;
int bx[4]={0,0,1,-1};
int by[4]={1,-1,0,0};//移动的数组如,如bx[0]和by[0]就代表纵坐标移动一下
void f(int v,int v1){//把起点的坐标传入函数
if(v==a3&&v1==a4){x++;return;//反回,继续
}
else{for(int i=0;i<4;i++){//有4个移动的方向。if(map[v+bx[i]][v1+by[i]]==0&&b[v+bx[i]][v1+by[i]]==1){map[v][v1]=1;//我们踏过的地方标记f(v+bx[i],v1+by[i]);//不可能就走一步就停下的,进入函数继续走map[v][v1]=0;//当你走完的时候要还原不然会影响其它的线路。}}}
}
int main()
{int i,m,l,a1,a2;int ji,jo;scanf("%d%d%d",&i,&m,&l);scanf("%d%d%d%d",&a1,&a2,&a3,&a4);//起点和终点for(int u=1;u<=i;u++){for(int f=1;f<=m;f++){b[u][f]=1;}}for(int y=0;y<l;y++){scanf("%d%d",&ji,&jo);b[ji][jo]=0;//打标记障碍不可以走,不要b[0][0]....b[0][6].}f(a1,a2);printf("%d",x);return 0;
}

每一行的注释都是我的心血之作,我绝不允许你看不懂,看不懂就给我使劲的看,看懂为止。最好边看边写看懂了题也就迎刃而解了。

可恶我是个废物我讲不出来,气死我雷,去找个搜索的题目搞一下!

我是废物快到点了还没写出来先发了,一定补!

更多推荐

学习日记12/28(今日平平无奇,无趣啊)

本文发布于:2024-03-23 14:38:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739347.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:无趣   无奇   今日   日记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!