周报

来到工作室度过的第一周,充实而又精彩的一周:
周一:写了一篇博客,也是第一篇正式发布的博客。的确,之前有些过,但写的是学习笔记,觉得太初级,就没敢发布。而这一篇写的是汉诺塔问题,不能说因为问题本身有难度一些我就才敢发表出来,真正的原因是觉得自己本就该勇敢的迈出这一步。
该链接:https://blog.csdn.net/qq_43771635/article/details/88804793
周二:洛谷闯关两题:①https://www.luogu.org/problemnew/show/P1421
②https://www.luogu.org/problemnew/show/P1425
第一题较简单,无太多总结;第二题在做题的过程中学到了通过两时间值来计算时间差的方法:
a时b分~c时d分的时间差:当b<=d时,相差c-a时d-b分;当b>d时,相差c-a-1时(60-b)+d分。
周三:洛谷闯关两题:①https://www.luogu.org/problemnew/show/P1422
③https://www.luogu.org/problemnew/show/P1085
第一题可以总结出:

printf("%.1f",y);

输出不四舍五入保留一位小数的一般方法。
第二题中可以学到:
(1)找到数组中最大值

int max=a[0];
    for(i=0;i

(2)找到数组中与最大值相等的第一个元素

for(i=0;i

周四:洛谷闯关两题
①https://www.luogu.org/problemnew/show/P1089
②https://www.luogu.org/problemnew/show/P1909
第一题收获:
(1):输入一个数组

for(i=0;i<12;i++)
       scanf("%d",&a[i]);

(2):存钱超过一百,存整百

t/100*100

第二题收获:
本题核心步骤:

int p[3];
 int x,y;
 for(i=0;i<3;i++)
     {
      x=n/a[i];y=n%a[i];
      if(y>0) p[i]=(x+1)*b[i];
      else p[i]=(x)*b[i];
  }

目标n支笔,一个盒子a[i]支笔,当y>0时,需要x+1个盒子
周五:洛谷闯关三题
①https://www.luogu.org/problemnew/show/P1008
②https://www.luogu.org/problemnew/show/P1035
③https://www.luogu.org/problemnew/show/P1423
第一题:
(1)先找到满足1:2:3的各组三位数:循环了三次,也是第一次用到三循环

for(i=111;i<1000;i++)
     for(j=111;j<1000;j++)
         for(k=111;k<1000;k++)
             {
                    if(j/i==2&&j%i==0&&k/i==3&&k%i==0)

(2)手动将三个三位数的各个位数存入数组a[i]中;同时注意不同位数的算法:
n%10=个位;n/10=个位之前的(n-1)位;n/100=百位之前的(n-2)位;n/1000=千位之前的(n-3)位…一般由n/10…与n%10组合来算出一个整数的不同位数。

 if(j/i==2&&j%i==0&&k/i==3&&k%i==0)
     {
         int a[9],m,n;
                        a[0]=i%10;a[1]=j%10;a[2]=k%10;
                        a[3]=(i/10)%10;a[4]=(j/10)%10;a[5]=(k/10)%10;
                        a[6]=i/100;a[7]=j/100;a[8]=k/100;

(3)在上面的if内部再次双循环,目的:利用排序法的原理,实现数组中各元素彼此之间不相等,且没有0出现;并且注意两次break;的含义类似,但第一个break;只能跳出内层for循环,第二个break;跳出的是外层for循环。

for(m=0;m<8;m++)
                            {
       for(n=m+1;n<9;n++)
                             
          {
            if(a[m]!=a[n]&&a[m]!=0&&a[n]!=0) ; 
               else break;
           }
         if(n>=9);
         else break;
                         }
      if(m>=8) printf("%d   %d   %d\n",i,j,k);

并且注意两个if语句()后的;的功能,和n>=9,m>=8以及两个break;设定的作用。
第二题与第三题都较为简单,不需过多阐述。

你可能感兴趣的:(学习C语言记录)