精华内容
下载资源
问答
  • 题目描述: 题解 个人添加了注释,答案由学校课程组给出,不是原创回答 #include<bits/stdc++.h> using namespace std; int dayNum[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};...bool checkYear(int x) /...

    题目描述:

    题目描述

    题解

    个人添加了注释,答案由学校课程组给出,不是原创回答

    #include<bits/stdc++.h>
    using namespace std;
    
    int dayNum[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    
    bool checkYear(int x)  //判断给出的年份x是否为闰年
    {
    	if(x%400==0) return true;
    	if(x%4==0&&x%100!=0) return true;
    	return false;
    }
    
    void nxt(int &a,int &b,int &c)  //移动到下一个日期
    {
    	bool flag = checkYear(a);
    	if(flag) dayNum[2]++;
    	c++;
    	if(c>dayNum[b])
    	{
    		c = 1;
    		b++;
    	}
    	if(b>12)
    	{
    		b = 1;
    		a++;
    	}
    	if(flag) dayNum[2]--;
    }
    
    int d[10];
    int pos;
    bool check(int a,int b,int c)  //检查a年b月c日是否是回文日期
    {
    	pos = 0;  //pos为回文数的位数
    	while(c)  
    	{
    		//数字处理的非常巧妙,循环使用%10和/10的方式
    		//把年月日每一位数字计入d[10]中
    		d[pos++] = c%10;
    		c/=10;
    	}
    	while(b)
    	{
    		d[pos++] = b%10;
    		b/=10;
    	}
    	while(a)
    	{
    		d[pos++] = a%10;
    		a/=10;
    	}
    	for(int i=0;i<pos;i++)
    	{
    		if(d[i]!=d[pos-i-1]) //比较d[10]数组是否回文
    			return false;
    	}
    	return true;
    }
    
    int main()
    {
    	int x,y,z;
    	scanf("%d%d%d",&x,&y,&z);
    	int a,b,c;
    	a = b = c = 1;
    	int ans = 0;
    	while(1)
    	{
    		if(check(a,b,c)) 
    			ans++;   //符合要求的年份数目+1
    		if(a==x&&b==y&&c==z)  //到达a年b月c日,题目已保证a, b, c合法
    			break;
    		nxt(a,b,c);
    	}
    	printf("%d\n",ans);
    	return 0;
    }
    展开全文
  • 请大家理解思路,自己尝试写出代码,不要抄袭! 请大家理解思路,自己尝试写出代码,不要抄袭! 请大家理解思路,自己尝试写出代码,不要抄袭! Problem C....分析: dfs即可;每搜到一个块,把所有矿打标记,并把答案...

    请大家理解思路,自己尝试写出代码,不要抄袭!
    请大家理解思路,自己尝试写出代码,不要抄袭!
    请大家理解思路,自己尝试写出代码,不要抄袭!

    Problem C. 课堂作业-9-2
    分析: dfs即可;每搜到一个块,把所有矿打标记,并把答案ans+1。
    代码:

    //jerry99
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int tmax=1005;
    int n,dx[9]={0,-1,-1,-1,0,0,1,1,1},
          dy[9]={0,-1,0,1,-1,1,-1,0,1};
    char s[tmax][tmax];
    bool v[tmax][tmax];
    void dfs(int x,int y)
    {
        int i,tx,ty;
        v[x][y]=true;
        for(i=1;i<=8;i++)
        {
            tx=x+dx[i];
            ty=y+dy[i];
            if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&!v[tx][ty]&&s[tx][ty]=='#')
                dfs(tx,ty);
        }
        return;
    }
    int main()
    {
        scanf("%d",&n);
        int i,j;
        getchar();
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
                scanf("%c",&s[i][j]);
            getchar();
        }
        int ans=0;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
        {
            if(s[i][j]=='*'||v[i][j]==true) continue;
            ans++;
            dfs(i,j);
        }
        cout<<ans;
        return 0;
    }
    

    Problem D. 课堂作业-8-4
    分析:
    暴力搜索即可;
    也可用“并查集”,将相互能到达的点放在一个集合里,最后只需判断s和t是否在一个集合内。这里提供使用“并查集”的代码。
    代码:

    //jerry99
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int tmax=1e5+5;
    int n,m,f[tmax];
    int find(int x)
    {
        return f[x]==x?x:f[x]=find(f[x]);
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        int i,a,b;
        for(i=1;i<=n;i++)
            f[i]=i;
        for(i=1;i<=m;i++)
        {
            scanf("%d%d",&a,&b);
            f[find(a)]=find(b);
        }
        scanf("%d%d",&a,&b);
        if(find(a)==find(b)) printf("Yes");
        else printf("No");
        return 0;
    }
    

    Problem E. 约瑟夫环plus
    分析: 第一个人报一次算作一轮,能推出来一轮之后删掉了几个人和下一轮第一个人应该报几。进行了几轮,第一个人就报了几次数。由于n很大,k很小,一轮会删掉很多人,因此轮数不会太大,时间复杂度可以接受。
    代码:

    //jerry99
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n;
    int k,x,tx;
    int main()
    {
        scanf("%lld%d",&n,&k);
        ll ans;
        x=1;
        for(ans=1;;ans++)
        {
            if(x==k) break;
            if(1ll*(k-x+1)>n)
                x+=(int)n;
            else
            {
                tx=x;
                x=(n-(k-x+1)+1)%k;
                if(x==0) x=k;
                n=n-1-(n-(k-tx+1))/k;
            }
        }
        cout<<ans;
        return 0;
    }
    

    请大家理解思路,自己尝试写出代码,不要抄袭!
    请大家理解思路,自己尝试写出代码,不要抄袭!
    请大家理解思路,自己尝试写出代码,不要抄袭!

    展开全文
  • 输入数据 一个正整数n,n输出数据 最终0的个数 思路 最开始没思路,只想到n可以排除暴力计算,猜测最终0的个数是可以O(n)得到,开始尝试用数学归纳法碰瓷: n=12时,12转化为二进制1100,最终结果3个0,转化为二进制...

    时间限制 1000 ms
    内存限制 64 MB

    题目描述

    初始有一个数nn,每过一秒所有大于1的数xx都会分裂成3部分:⌊x/2⌋ , x%2 , ⌊x/2⌋
    ( 这个符号指floor()取整

    问经过足够长的时间后,即所有的数都是0或1的时候,0的个数是多少

    输入数据

    一个正整数n,n<=1e12

    输出数据

    最终0的个数

    思路

    最开始没思路,只想到n<=1e12可以排除暴力计算,猜测最终0的个数是可以O(n)得到,开始尝试用数学归纳法碰瓷:
    n=12时,12转化为二进制1100,最终结果3个0,转化为二进制0011;
    n=5时,5转化为二进制101,最终结果2,转化为二进制10;
    n=16时,16转化为二进制数10000,最终结果15,转化为二进制01111。

    大胆假设,该规律对所有的n都成立,严格证明不会写…

    代码如下:

    //二进制运算符不会用,所以是用字符串的方式存二进制数
    #include<bits/stdc++.h>
    #include<cstring>
    using namespace std;
    char str[101];
    long long Int2Binary(long long num, char* str)
    {
        int i=0,j,k;
        while(num>=1)
        {
            str[i++]='0'+num%2;
            num/=2;
        }
        int len=strlen(str);
        long long nn=1;
        long long res=0;
        for(i=0;i<len;i++,nn*=2)
        {
            if(str[i]=='0') res+=nn*1;
        }
        return res;
    }
    
    int main()
    {
        long long n;
        cin >> n;
        memset(str,'\0',100);
        cout << Int2Binary(n, str) <<endl;
        return 0;
    }
    
    展开全文
  • 传统的大学计算机公共课程强调计算机的... 最后,验证了教学模式的有效性,将计算思维训练的思想和方法付诸实践。 研究表明,针对计算机思维能力培养的计算机基础课程对提高学生的创新能力和综合素质具有重要作用。
  • 逻辑思维训练1200题

    2017-04-29 11:35:58
    《逻辑思维训练1200题(超值白金版)》介绍了排除法、递推法、倒推法、作图法、假设法、计算法、分析法、类比法、推理法、判断法、综合法等11种常用的解题方法,并精选1200道世界上最顶级的逻辑思维训练题,既有简单的...
  • 第1讲整数计算综合内容概述熟练运用已学的各种方法解决复杂的整数四则运算问题学会利用加减抵消分组计算方法处理各种数列的计算问题学会处理定义新运算的问题初步体会用字母表示数典型问题兴趣篇1.计算7在第一个
  • 本文提出C语言程序设计课程加强计算思维训练,比单纯讲授知识更重要,将计算思维方法在课程教学中加以运用,可以提高学生综合分析问题和解决问题的能力。关键词:C语言程序设计;计算思维;教学研究1引言C语言程序...

    摘要:分析计算思维对大学生的培养非常重要。本文提出C语言程序设计课程加强计算思维的训练,比单纯讲授知识更重要,将计算思维方法在课程教学中加以运用,可以提高学生综合分析问题和解决问题的能力。

    关键词:C语言程序设计;计算思维;教学研究

    1引言

    C语言程序设计课程是大学计算机专业的入门课程。教学过程中存在一些问题,如部分学生认为难度很大、学习不感兴趣等。为更好地了解实际情况,针对大一新生做了问卷调查,结果如表1所示。表1显示,新生中有接近一半在高中阶段选择文理兼修。他们的思维与纯理科生存在一些差异。另外,在学习C语言的过程中,学生的主要问题是如何能通过编写程序解决实际问题。因此,在进行C语言授课时,老师应该更注重计算思维的训练。这比单纯的讲授相关知识更加重要[1]。如何把重点知识与计算思维相结合并进行融会贯通,是值得思考的问题。

    2计算机思维

    计算思维主要有算法思维和程序思维两大分支。最初计算机采用“计算”这一概念时,就出现过“计算思维”这一常用名词,也被称为“算法思维”,是将问题转换为从输入到输出的转换过程。此时,计算机作为工具更多应应用在数值计算中[2]。周以真教授提出计算思维(ComputationalThinking)是指运用计算机科学的基础概念去求解问题、设计系统和理解人类行为,其本质是抽象和自动化[3]。很多专家学者认为,计算思维是人类应具备的第三种思维。第一种思维是实验思维:通过实验来观察结果,发现、推断与总结。这种思维强调观察与归纳。第二种思维是理论思维:通过假设、预设来推导出定义、性质、定理并且通过各种方法来证明其正确与错误。这种思维强调推理和演绎。而计算思维强调的是设计与构造。它关注的是人类思维中有关可行性、可构造性和可评价性的部分。在当前环境下,理论与实验手段面临着大规模数据的处理,不可避免地要应用计算手段来辅助[4]。人类的思维方式与机器不同。人在解决某个问题时,一般会寻找某种公式来快速解决。人类求解的方式,希望有较小的计算量,只需要根据数学公式或经验,就能找到相应的答案。但是计算机需要按照指令完成相关工作。人类要根据计算机的特点,遵循计算思维,设计一定的算法来进行求解,这就要求按照计算思维的特点来进行设计。例如求解12和18的最大公约数的问题。人类往往能根据经验,一眼就判断出答案是6。而计算机却没有这个能力,需要设计一些算法来解决。第1种方法是枚举法。这种方法的求解过程,规则可能很简单,只要把满足条件的结果都列举出来,逐个测试,但是计算量很大,需要循环多次。求最大公约数的步骤为:(1)设变量i为1;(2)如果a和b都能被i整除,则记下这个i;(3)i加1,重复第2步,直到i等于a或b;(4)记下最大可以整除的a和b的i,就是最大公约数。第2种方法是辗转相除法。这种算法效率较高,但是对于人们来说不易理解。其步骤如下:(1)如果b等于0,计算结束,a是最大公约数;(2)否则,计算a除以b的余数,让a等于b,b等于那个余数;(3)回到第1步。通过上述比较可以看出,学习程序设计类课程,掌握计算思维,遵循计算机思考的方式来解决问题,是一种非常重要的能力。

    3基于计算思维的教学

    将计算思维能力的培养贯通在C语言教学中,有目的地培养学生应用计算思维解决平时学习遇到的问题,以达到提高学生解决实际问题的能力。(1)将语法融入问题的求解中。从实际应用案例中抽取教学要素。从算法的维度,将迭代、枚举、递归、分治、排序等算法融入实际问题的求解过程,让学生在潜移默化中提高计算思维能力[5]。例如,可以利用韩信点兵的案例,融入的知识点包括逻辑运算符和break的使用,同时将枚举法的算法思想引入教学中。这样可以让学生在学习新知识的同时训练计算思维。如何将一个具体的问题进行抽象是解决问题的关键。韩信命令士兵5人一排,结果多出3人。命令士兵7人一排,结果多出6人。命令士兵11人一排,结果多出4人。提出韩信的兵人数满足什么条件?在计算机中如何表达出人数的条件?引出逻辑运算符,于是韩信点兵的人数使用C语言写出表达式为i%5==3&&i%7==6&&i%11==4。然后引导学生学会思考如何应用计算机C语言来解决这个问题。提出利用计算机运行速度快的特点,发挥它的优势,让它来逐个检验。检验的范围在500----1000之间,使用循环语句可以解决这个问题,进而引出枚举法的思想。枚举法是计算机解决问题很擅长的方法。利用运算速度快、精确度高的特点,能对解决问题的所有可能情况一个不漏地进行检验。枚举法应用广泛,学生掌握这种方法,可以举一反三,求素数、闰年等很多情况下可以都使用。这种思想对计算思维的理解,对以后的学习和工作都有很好的帮助。(2)采用图示化方法。将复杂的思维来进行描述,可以让学生对所接受的问题一目了然。对于复杂的问题,可以先通过规模较小的问题求解。(3)通过OJ平台在线训练学生的编程能力。通过不断做题,强化学生的实际动手能力,挑选经典的问题,用经典的算法进行求解,培养学生的计算思维能力。

    4总结

    在C语言程序设计教学中,将计算思维的培养作为教学的重要指导思想来促进授课方式的改革,势在必行。在教学中发现,学生使用计算思维来求解遇到的问题有助于能力的提高,有助于培养大学生的创新能力。当学生具备一定的计算思维能力后,需要举一反三地解决所遇到的问题,将所学知识融会贯通,以达到事半功倍的效果。

    参考文献

    [1]赵美利,牛晓峰.师范类计算机课程体系与计算思维的培养.贵阳学院学报(自然科学版),2016,11(01):78-80

    [2]王梅娟,李辉,韩敬利,郑长友,蒋园园.基于计算思维的大学计算机基础课程改革研究与实践.计算机教育,2020(03):59-63

    [5]揭安全.高级语言程序设计—基于计算思维能力培养.北京:北京邮电出版社,2015

    作者:胡华 王莹 单位:枣庄学院信息科学与工程学院

    阅读次数:人次

    展开全文
  • 该书介绍了排除法、递推法、倒推法、作图法、假设法、计算法、分析法、类比法、推理法、判断法、综合法等11种常用的解题方法,并精选1200道世界上最顶级的逻辑思维训练题,每一道训练题都是为全方位培养和训练读者的...
  • 该书介绍了排除法、递推法、倒推法、作图法、假设法、计算法、分析法、类比法、推理法、判断法、综合法等11种常用的解题方法,并精选1200道世界上最顶级的逻辑思维训练题,每一道训练题都是为全方位培养和训练读者的...
  • 本文从高职院校计算机专业学生编程技能训练过程中存在的问题出发,笔者分析后认为在学习过程中既要注重编程思维的培养,又要注重实际代码的编写,既要重视单一课程的学习,又要重视系统知识的综合应用。
  • 新计算机算法设计 与...问题经过这次课程设计能够培养我们独立思考综合分析与 动手的能力并能加深对课堂所学理论和概念的理解能够训练 我们算法设计的思维和培养算法的分析能力 二 课程设计内容 1 分治法 快速排序 2
  • 第一阶段数据分析思维与业务流程 数据分析概述 问题确认与指标体系搭建 逻辑树业务拆解 数据分析方法(对比分析,分组分析,趋势分析,综合分析,漏斗分析,矩阵关联分析) 数据分析流程(需求确认,数据收集,数据...
  • 这种“抽象”级别的成果,适用于各种应用场合,也是训练计算思维的根本依托之一。  在实践性的学习路线中,实践可以分为三个层次:验证性、设计性和综合性。验证性实验是最初步和基本的的,通过验证课堂讲的、书上...
  • funcode坦克大战.zip

    2020-07-05 11:04:34
    软件课程设计是大学生计算机实践教育体系中的重要环节。通过具有较高显示度的作品激发...今后需要结合计算思维的培养要求,将抽象的计算思维转化为直观的游戏精灵,进一步据此建立基于funcode平台的计算思维训练平台。
  • bagging算法(随机森林RF算法简介) ...通过上图我们知道,bagging是每个弱学习器之间的并行计算最后综合预测,但是,有一个问题需要我们注意,在训练集到子训练器的过程叫做“子抽样”。 这个子抽样是一个“随机有...
  • 学习数据结构的目的是为了了解计算机处理对象的特性,将实际问题中所涉及的处理对象在计算机中...与此同时,通过算法训练来提高学生的思维能力,通过程序设计的技能训练来促进学生的综合应用能力和专业素质的提高。 ...
  • Tableau的数据结构类型 学习数据类型的意义: 数据结构是计算机等专业的基础课,是十分重要的核心课程。...与此同时,通过算法训练来提高学生的思维能力,通过程序设计的技能训练来促进学生的综合
  • 毕业实践实习报告是对实习中看到的、参与的各种...写毕业实践实习报告是对实习内容的系统化、巩固和提高的过程,是以后计算机各类报告的入门尝试,是进行计算机应用、软件开发、图形图像处理、动画制作等思维训练
  • 这种“抽象”级别的成果,适用于各种应用场合,也是训练计算思维的根本依托之一。   在实践性的学习路线中,实践可以分为三个层次:验证性、设计性和综合性。验证性实验是最初步和基本的的,通过验证课堂讲的、书...
  • 机器人教育指通过设计、组装、编程、运行机器人,激发学生学习兴趣、培养学生综合能力。它融合了机械原理、电子传感器、计算机软硬件及人工智能等众多先进技术,对学生能力、素质的培养有着巨大的作用。 与传统的...
  • 编程积木

    2020-09-30 16:08:57
    机器人作为增强学生的动手能力,促进学生思维发展,创新能力训练的有效工具,在教育界逐渐得到认同。科技时代发展趋势的需要,机器人已不是新鲜事物,早已是“旧时王谢堂前燕,飞入寻常百姓家”,家用机器人、服务...
  • 人体的脑电信号综合地反映了大脑神经系统的思维活动,是分析脑状况和神经活动的主要依据。 将脑-机接口技术与康复训练结合,可为患者提供一种能够提取其主观训练意愿来帮助患者提高训练效果的康复系统。对于脑外伤、...
  • 机械制造工艺及设备毕业设计是我们完成本专业教学计划的最后一个极为重要的实践性教学环节,是使我们综合运用所学过的基本课程,基本知识与基本技能去解决专业范围内的工程技术问题而进行的一次基本训练 。...
  • 学编程训练思维,受益终生; 掌握编程可有效,提升工作效率。 Python,人工智能时代最佳的编程入门语言。 设计人性化,语法简单,容易掌握,近年来热度不断攀升; 丰富的内置标准库,强大的第三方库,大大缩减编程...
  • 学编程训练思维,受益终生; 掌握编程可有效,提升工作效率。 Python,人工智能时代最佳的编程入门语言。 设计人性化,语法简单,容易掌握,近年来热度不断攀升; 丰富的内置标准库,强大的第三方库,大大缩减编程...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    虽然近年来教学方式有所改变,但受传统教学的影响,教学内容仍然是理论与实践相脱节,使课堂教学显得空洞、呆板,缺乏学习兴趣,束缚了学生的思维发展且不能考核出学生的实际操作水平、综合分析能力及创新能力。...
  • 用户画像系统:涉及画像标签体系设计,标签体系层级关系设计,各类标签计算实现,兴趣类标签的衰减合并,模型标签的机器学习算法应用及特征提取、模型训练等;6. OLAP即席分析平台:涉及OLAP平台的整体架构...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

计算思维综合训练