12月6日学习总结

本文讲述了作者从C语言基础文件操作开始,回顾了常用的读写方法,并结合实际项目(如推箱子游戏)引入了栈算法。重点介绍了如何使用C语言实现简单的登录注册功能,参考了CSDN博主的代码实例。接下来作者计划扩展到文件功能,目标是完成用户登录和注册功能的实现。
摘要由CSDN通过智能技术生成

项目:项目开始准备进行文件的读写

           dp开始看了

          开始敲阿哈算法了

         关于那个单调栈的问题

学习成功展示

文件常用的操作无非是读,写,改,移

虽然我有学过c语言,但是只是浅尝辄止。

所以我先把c语言常用的文件打出来https://blog.csdn.net/weixin_35193765/article/details/117129436?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0.no_search_link&spm=1001.2101.3001.4242.1icon-default.png?t=LA92https://blog.csdn.net/weixin_35193765/article/details/117129436?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0.no_search_link&spm=1001.2101.3001.4242.1这个把常用的文件进行了解释说明,然后现在我就可以开始说我的项目;

我进行的推箱子目前只用到了结构体,数组,然后算法就只有栈。所以我要开始着手于文件的功能。

目前我给自己画的饼是今天要写完用户的登录和注册。

C语言实现登录注册_monkey-jie的博客-CSDN博客_c语言实现简单的注册登录这是一个用纯C语言和文件操作实现的系统的登录、注册和忘记密码功能。可以用于c语言大作业的登录系统。下面分享一下具体的代码。首先定义一个结构体来存放用户的注册信息,账号密码等。typedef struct The_users //typedef 可以定义结构体别名{ char id[11]; //账号 char pwd[20]; //密码 char name[1...https://blog.csdn.net/qq_40663357/article/details/86663598?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163879533716780271520031%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163879533716780271520031&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-9-86663598.first_rank_v2_pc_rank_v29&utm_term=c%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95&spm=1018.2226.3001.4187参照于这个博客,进行修改。

dp

(yysy)dp给我爬真的好难,根本不会

害,突然发现我根本都不会说dt

直接发链接,证明我看过吧

阿哈算法

说一下dfs与bfs的区别吧

bfs:宽度搜索

他是走一步就扩散一步,最终来到终点

dfs:深度搜索

是先走一步,然后将这一步走到头,撞到南墙,我就回去一步,然后继续撞南墙,最后到了终点。

关于单调栈

题目链接

栈算法训练 - Virtual Judge

n 个罪犯排成一列,第 i 个罪犯手持长度为 L i 的机械利爪。当铃声响起时,每个人都会把站在自己前面的一些人杀掉。所有人都在同一时刻动手杀人。也就是说,当且仅当 j  <  i 并且 j  ≥  i  -  L i 时,第 i 个人能杀掉第 j 个人。

给定机械利爪的长度,你需要计算出铃响之后还有多少人活着。

第一行输入包含 1 个整数 n ( 1 ≤  n  ≤ 10 6 ) —— 代表罪犯的数量。

第二行输入包含 n 个以空格间隔的整数 L 1 ,  L 2 , ...,  L n ( 0 ≤  L i  ≤ 10 9 ) —— 代表第 i 个人手持的机械利爪的长度为 L i

输出 1 个整数 —— 铃响之后还活着的人数。

4 
0 1 0 10 
输出
1 
输入
2 
0 0 
输出
2 
输入
10 
1 1 3 0 0 0 2 1 0 3 
输出
3 

代码

#include<stdio.h>
int a[1000010];
main()
{
    int min(int a,int b);
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    int sum=0;
    int s=n;
    for(int i=n-1;i>=0;i--)
    {
        if(i<s)
            {
                sum++;
                s=min(s,i-a[i]);
            }
        else
            s=min(s,i-a[i]);

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


}
int min(int a,int b)
{
    if(a>b)
        return b;
    else
        return a;
}

栈算法训练 - Virtual Judge

Farmer John的奶牛在风中凌乱了它们的发型……
每只奶牛都有一个身高hi(1 ≤ hi ≤ 1,000,000,000),现在在这里有一排全部面向右方的奶牛,一共有N只(1 ≤ N ≤ 80,000)。对于奶牛i来说,如果奶牛i+1,i+2,……,N这些奶牛的身高严格小于奶牛i,则奶牛i可以看到它们凌乱的发型。
比如下面这个例子:

* * * * = *
= * * * = *
= * - * = * 奶牛面向这边-->
= * = * = *
= - = = = *
= = = = = =
1 2 3 4 5 6
('*'表示空的,这是译者为了格式特意弄的,原题没有)

令ci表示第i只奶牛能够看到的发型数量,请计算c1 + c2 + c3 + … + cN的值
对于上面这个例子,答案为3 + 0 + 1 + 0 + 1 + 0=5。

 #include<stdio.h>
long long int q[80010];
main()
{
    long long int n;
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld",&q[i]);
    long long int stack[80010];
    long long top=0;
    long long int sum=0;
    for(int i=1;i<=n;i++)
    {
        if(top==0||q[stack[top]]>q[i])//空栈我就进栈或者我栈中的数比要进栈的数大,这个数就
//进栈
            stack[++top]=i;//进栈的操作,保留值
        else
            if(q[stack[top]]<=q[i])//如果将要进栈的数大于等于等于我栈中的数,我栈中数出栈
            {

                while(q[stack[top]]<=q[i]&&top!=0)//继续判断下一个符合不,或者如果我全部出
//栈,为空栈,我就
        {
                sum=sum+i-stack[top]-1;//通过这种方式处理
                top--;


        }
        stack[++top]=i;//最后那个将要进栈得数进去
    }
}
for( int i=1;i<top;i++)//处理没有进栈的数
     sum=sum+n-stack[i];
printf("%lld\n",sum);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值