跟我从零开始学C++(入门预科班4)

引言

怎么样呢,小伙伴们,有没有感觉十分好玩开心呢,虽然有一些比较难懂,但是根据后续的学习,我相信小伙伴们对这种题,分分钟拿下,都是小case,稍后我会带着大家继续从零开始学习C++,从基础到核心,再到算法和数据结构,到最后独立完成一整个项目。博主还会时不时的发一些好玩的题,和大家一起解,争取让大家自己看着自己是如何一步步成为自己理想的大师的。

好了,小伙伴们,今天作为预科班的最后一节快乐编程课,给大家看点好玩的 ,顺带,解决一下上次给大家留的作业有没有认真思考,然后完成。废话不多说,来了来了!!!

1.输出没有重复的三位数 用1,2,3,4完成

这个问题的关键在于如何可以让数不重复,我这里的做法是,依次遍历,如果可以做到三位数不重复,那么我们就把他输出,在输出中用到了百位数的累加,以便最后可以成一个数,而不是字符串,至于为什么这么写而不直接abc,小伙伴们学到后边慢慢的就会懂了。在前边的章节中提到过,break和continue是用在循环里的,break会终止当前循环,continue会跳过当前循环进入下一循环,我们这里就用到了,当满足题意的时候就输出,当不满足题意的时候就用continue跳过该循环,让其进入下一循环,而不影响所有的数字遍历,不会漏掉。

int a,b,c,num;
for (i=1,i<=4,i++){
    for(j=1,j<=4,j++){
        if(j!=i){
            for(k=1,k<=4,k++){
                if(k!=i&&k!=j){
                    frint 	num=i*100+j*10+k
                }
                else	continue;
            }
        else continue;
        }
    }
}

2.水仙花数问题

输出100-900的之间的水仙花数(水仙花数:个位数的三次方+十位数的三次方+百位数的三次方=这个数本身)

这个问题的关键就是把数字的个位十位百位单独分离出来,分离出来后基本上题目就被解决了,之前在前边文章提到的“/”这个是除法的意思,小伙伴们也不知道有没有查,这个运算(/)是除法,这个运算有个特性就是,当两个整数做除法运算时,得到的是仍然是整数,它会直接把小数后边的全部省略,例如:3/2=1,99/10=9,正是有了这样的特性,我们在分离个十百位的时候,会很容易吧小位次的分离掉从而剩下。

for (i=100,i<=999,i++)
{
	a=i/100;
	b=(i-a*100)/10;
	c=i-a*100+b*10;
	num=a*a*a+b*b*b+c*c*c;
	if(num==i)
    {
		print num;
	}else continue;
	
}

3.鸡兔同笼问题

鸡兔同笼问题作为我们小学经典的奥数题,我们一点也不陌生,那我们能不能用伪代码的方法实现一下呢;我觉得是可以的;

解题思路:输入了有x个头,y只脚。想求ji多少,tu多少?

1.已知ji有2只脚,tu有4只脚,那我们让他们每个挑起来一半的脚,那么剩下的就有y/2只脚

2.现在ji有1只脚,tu有2只脚,共y/2只脚,那如果每个在都跳起来一只脚,那么剩下的就是tu的数量

3.那么鸡兔的数量显然就都知道了

jitu(x,y)
{
	int ji,tu;
	tu=y/2-x;
    ji=x-tu;
    print ji,tu;
}

4.数组冒泡排序

在进行编写之前,我先给小伙伴们简单讲一下什么是数组,(说话说的比较俗了,不过也是为了大家理解,各位大佬看见请不要说我,谢谢!!!!)

我们把一些放在一个格子里的数当成一个数组,我们C++中用数组名[数组大小]来定义一个数组,或者说数组名[数组中元素],例子:arr[9],arr[1,2,7,9,13],数组的作用有很多,我们这里用到的就是数组的支持操作,和数据处理功能。

我们在了解背景之后,还是要了解一下数组应该怎么使用,当arr[2]中数字是索引时,是代表他在这个数组中位置的数字,我们来举例,还以上边的arr[1,2,7,9,13]为例,在计算机中开始是从0开始的,那么我们arr[0]就代表了数组中第一个位置的数1,即arr[0]==1;在我们进行初始化的时候,arr[num]中的数字就是数组的大小,举例,int arr[9],就是我们定义了一个整形的数组,且数组大小为9,而且由于数组的初始位置是从arr[0]开始的,那么最后一个位置就是arr[8].

请把数组 arr[21,9,5,8,13]进行冒泡排序(按照递增顺序)

for(i=0,i<=4,i++){
    for(j=i,j<=4,j++){
        if(arr[i]>=arr[j]){
            int t=arr[i];
            arr[i]=arr[j];
            arr[j]=t;
        }else continue;
    }
}

5.输出1~50当中的素数

素数(prime number)是指大于1的自然数,除了1和它本身之外,没有其他因数。例如,2、3、5、7、11等都是素数。

### 方法一;
for(i=2,i<=50,i++)
{
   if(i==2) { print i;}
   else
    {
   	 for(j=1,j<=i,j++){
       int temp=i%j;
       int num_yinzi=0;
       if(temp==0){
           num_yinzi++;	
       }else continue;
      if(num_yinzi==2){
          print i
      }else  continue;
    }
   }
}

###  方法二;
for(i=2,i<=50,i++){
    if(i>2)
    {
   	 for(j=2,j<i,j++){
       int temp=i%j;
       if(temp==0){
          print i;
       }else continue;
    if(i==2){
        print i;
    }
}

作业解说

小伙伴们,上次留下的题大家都有思路了么,我呢在这用伪代码(稍加了一点点代码基础奥)讲解一下

正序

在这里插入图片描述

#正序
把整个三角堆看作是一个在四行七列的棋盘格内,不同行不同列构成的一个正的三角形
for(i=1,i<=4,i++)						#用for循环来遍历行数,从第一行,到第四行
{
    for(j=1,j<=7,j++)					#再用for循环遍历列数,从第一列到第七列
    {
        if(j>=4-(i-1)&&j<=4+(i-1))			#发现图像关于第四列对称,我们就用第四列
        								#当轴把每行的星星个数和行数挂上关系,如果在这个范围
        								#内就在这个棋盘格输出星星,如果不在这个范围内,说明
        								#这个棋盘格是空
        {
            for(k=4-(i-1),k<=4+(i-1),k++)
            {
                print"⭐"
            }
        }
         else
         {
             print" "
          }
    }
}

倒序

在这里插入图片描述

#倒序
倒序同理,讲顺序颠倒即可
for(i=1,i<=4,i++)
{
    for(j=1,j<=7,j++)
    {
        if(j>=4-(i+2)&&j<=4+(i+2))
        {
            for(k=4-(i+2),k<=4+(i+2),k++)
            {
                print"⭐"
            }
        }
         else
         {
             print" "
          }
    }
}

菱形

在这里插入图片描述

#菱形
我们可以把菱形分为上下两个三角形,上边的三角形同“正序”
下边的三角形同“逆序”不过下边的小三角需要想的东西多一点
for(i=1,i<7,i++)
{
    if(1<=i<=4)
    {
          for(j=1,j<=7,j++)
    	{
        	if(j>=4-(i-1)&&j<=4+(i-1))
       		 {
            	for(k=4-(i-1),k<=4+(i-1),k++)
            	{
                print"⭐"
            	}
      		  }
         	else
         	{
             print" "
         	}
    	}
    }
    if(4<i<8)
    {
        m=i-4;					#我们把i-4赋给新的参数m,让m代替i执行“逆序”操作
        for(j=1,j<=7,j++)
    	{
        	if(j>=4-(m+2)&&j<=4+(m+2))		#由于是“逆序”操作,所以我们需要把列数和星星数对上
       	 	{
           		 for(k=4-(m+2),k<=4+(m+2),k++)
            	{
                print"⭐"
            	}
       		 }
         	else
         	{
            	 print" "
        	 }
    	}
        
    }
}

空心菱形

在这里插入图片描述

#空心菱形
原理同菱形
for(i=1,i<7,i++)
{
    if(1<=i<=4)
    {
          for(j=1,j<=7,j++)
    	{
        	if(j=4-(i-1)||j=4+(i-1))
       		 {
                print"⭐"
      		  }
         	else
         	{
             print" "
         	}
    	}
    }
    if(4<i<8)
    {
        m=i-4;
        for(j=1,j<=7,j++)
    	{
        	if(j==4-(m+2)||j==4+(m+2))					#这个就是把用来遍历的操作,换成了只有每行的两颗星星
       	 	{
                print"⭐"
       		 }
         	else
         	{
            	 print" "
        	 }
    	}
        
    }
}

结语

入门预科班到这里已经到了尾声了,小伙伴们感觉怎么样呢,有没有感觉自己现在强的可怕,哈哈哈哈哈,有点说笑了奥,我都是讲了一些简单的东西和入门的基础,想必专业的玩家对我的文章肯定嗤之以鼻,但是对于一些刚入门的小白玩家来说,我讲的是不是都通俗易懂呢,虽然中间有一些难点,那是因为我在讲的时候故意淡化了一些定义和一些专业化的东东,但是我们想把电脑玩通可是一件很有趣的事情你,我本人就是按照给我高中弟弟讲课的方式来给大家讲的,我想大家肯定也没问题,如果觉得哪还是有点模糊,欢迎大家给我发私信。

接下来呢就要开始真正的学习C++了,入门预科是一个让大家对这个东西感兴趣好玩的一次入门,但是真正想要学习起来,大家肯定还是要下一番功夫的,所以大家一定要有攻坚精神,编程世界就像一个更加庞大的数学世界,但却没有数学世界那么深邃难以捉摸,你只要学懂,想必编程世界对你来说简直就是一片新的游乐场。加油啊,小伙伴们,冲冲冲!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值