2017全年4个月信奥学习总结与收获

经过漫长的4个多月的信息奥赛学习,对于我这么一个曾经从未接触过编程的人来说,已经是有很大的进步了(其实很少..),所以我在此对四个月的信奥编程学习进行总结与归纳:

一.了解了什么是信息奥赛

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(省略N字)也就是NOIP啦,毕竟玩这个也不光光是为了得奖(能得最好)

二.学会一些基本的算法:

1.基础算法:主要是基本的对库的调用(我只会用万能库O(∩_∩)O~),对一些基本的格式的运用,主要包括一些基本的输入输出,如cin,cout,scanf,printf等等,一些运算基础,如x++,x+=2,x/(x-1)等等;如简单A+B代码:

 

  • #include//调用这个万能库 
    using namespace std;
    int main() 
    {
    	int a,b;//定义两个字母a,b; 
    	cin>>a>>b;//输入这两个字母a,b; 
    	cout<<a+b<<endl;//输出a+b的和,endl指换行; 
    	return 0;//结束; 
    }

 

2.if语句:额。。这个没什么好说的,主要就是两个语句:if(如果怎么样怎么样){就怎么样怎么样}以及else(不然){就怎么样怎么样}。如判断奇偶数:

 

  • #include
    using namespace std;
    int main()
    {
        int x;
        cin>>x;
        if(x%2==0)//如果输入的X除以2的余数为0; 
        cout<<"Even"<<endl;//输出Even; 
        else//不然; 
        cout<<"ODD"<<endl;//输出ODD; 
    	return 0;
    }

 

3.循环:这个我能讲10节课,因为后面的基本所有的算法和各种各样的题解,基本上都用到循环,主要有for循环,语句是:for(执行的语句),每执行一次,接下来的内容中就会循环一次,有大大的用途,例如,数组的输入输出,字符串的各个字母的循环等等。还有他的孪生兄弟while语句,即:while(执行的语句)这个与for语句差不多,只要满足括号内的语句,系统就会自动进行循环,一旦不满足,系统会自动停下来。还有一个配套的break,用来在满足某个语句时直接跳出循环。以及各种循环套循环,循环NN次等等。最简单的循环如简单累加和:

 

  • #include
    using namespace std;
    int main()
    {
        int a,ans;
        cin>>a;
        for(int i=1;i<=a;i++)//定义一个字母I,开始赋值为1,每次增加1,直到它的值与a相等时停止; 
        {
        	ans=ans+i;//ans每次加上i的值,即为从1~a之间的每一个数; 
        }
        cout<<ans<<endl;
        return 0;
    }

 

4.数组:一维数组说简单了就是一大串数,用一个字母(或几个字母,自由定义)后面加一对中括号,中括号内是一个数字,在定义时,数字代表定义的数组的个数,在进行各种语句调用是,这个数字代表的是某个数组,即Int a[100]是代表定义100个数组,a[100]=0是代表把0赋值道第100的a数组中,两者代表的含义不同。二维数组也差不多,如果把一维数组看成是一根直绳上的一串数字,那么二维数组就是工工整整的写在一张白纸上的数字,定义和表示的方法也和一维数组差不多,只不过后面用到了两对中括号。字符数组,顾名思义,也就是存储字母或符号的数组,如char a[10];即使在数组a中存储数量不超过10的一串字符。数组用的就比较多了,如倒序输出:

 

  • #include
    using namespace std;
    int main()
    {
    	int a,b[10000];//定义数组B,个数为10000个; 
    	cin>>a;
    	for(int i=1;i<=a;i++)
    	{
    		cin>>b[i];//每次都输入第I个数组; 
    	}
    	for(int j=a;j>=1;j--)//注意:这里是从a开始,每次减1,直到j等于1; 
    	{
    		if(j!=1)
    		{
    		    cout<<b[j]<<' ';//输出第j个b数组,后面带空格; 
    		}
    		if(j==1)
    		{
    			cout<<b[1];//输出第一个b数组,后面不带空格; 
    		}
    	}
    	return 0;
    }

 

5.函数:有意思的东东,函数我一般使用bool来定义,定义后的函数可以在运算中运用,开始定义好,可以省下不少的步骤,用于减少时间复杂度,如下代码中,运用函数做到了缩短时间,避免超时的作用(再求素数):

 

  • #include
    using namespace std;
    bool hh(int n)//定义一个函数,函数名为hh。运用时会输入一个值N; 
    {
    	for(int i=2;i*i<=n;i++) 
    	if(n%i==0)//如果N除以i的余数为0 
    	{
    	    return 0;//返回的值为0 
    	}
    	return 1;//即如果返回值不为零,返回1 
    }
    int main()
    {
    	int n;
    	cin>>n;
    	for(int j=2;j<n;j++)
    	{
    		if(hh(j))//调用函数hh,如果j满足条件(即为返回值为1),就输出j; 
    		cout<<j<<endl;
    	}
    	return 0; 
    }

三.各种杂七杂八的算法

1.贪心:说简单了,就是尽可能的求最赚钱的方法。语言比较难以形容,具体看智力大冲浪的代码。在这之前请允许我描述一下题目:小伟报名参加了智力大冲浪电视节目,该节目开始给玩家N元钱(当然不会让你全拿走),接下来布置了M个小游戏,每个小游戏都必须在规定的时间内完成,不然会扣钱,但是不会让玩家赔钱。代码:

  • #include
    using namespace std;
    struct xxx{
    	long shijian,qian;
    }a[500];//定义结构体; 
    bool cmp(xxx x,xxx y)
    {
    	return x.qian>y.qian;
    }//定义函数; 
    int main()
    {
    	int a1,b,c;
    	bool d[1000]={};
    	cin>>a1>>b;
    	for(int i=1;i<=b;i++)
    	cin>>a[i].shijian;//输入每次游戏的规定时间; 
    	for(int j=1;j<=b;j++)
    	cin>>a[j].qian;//输入每次游戏完不成所扣的钱; 
    	sort(a+1,a+b+1,cmp);//将规定的时间从大到小排序; 
    	for(int k=1;k<=b;k++)
    	 {
    	 	c=a[k].shijian;
    	 	while(d[c]>0&&c>0)
    		c--;
    	 	if(c>0)
    		d[c]=1;
    	    else 
    		a1-=a[k].qian;
    	}
    	 cout<<a1<<endl;
    	return 0;
    }

四.暂时结束:好吧,我能玩的转的也就这么点点东东,2017的四个月也不能说完全没有收获,收获还是有的,但是没有到达期望,希望2018我能更加努力,更上一层楼!

(不得不说这篇是真的又臭又长)

你可能感兴趣的:(大总结)