第二次刷题感受——路漫漫其修远兮,吾将上下而求索。

  这一周,我们的团队进行了第二次刷题,6道题目对于团队的几个大佬来说不算太难,他们三下五除二,很快就有人6题通关了。真是厉害!但是这次似乎有几个题目超出了我这个菜鸟级的认知,好多高级的算法还没有学,甚至没有听说过。几个小时下来,忙了一身汗,依然分数惨淡。我真盼着快点学习D2、D3的课程。但是我还是对自己满意的,毕竟通过自己的努力还是作对了一部分。没做上的题目,我先通过看他们的博客,收藏起来,慢慢研究吧。下面我就把我刷的几道题觉得收获比较大的写写总结吧。

1、递归的妙用:比如在P1010 幂次方

  这个题目中(题目要求不在赘述了)主要收获:递归方法的使用

  因为刚刚学完了D1课程里的递归算法,觉得比较神奇,所以这道题我就尝试了一下,效果挺好。具体如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 void dg(int x){
 4     while(x>0){
 5         int zhishu=0,p=1; 
 6         while(x>=p*2){//找出比X小的最大的2的几次方的数。 
 7             p*=2;
 8             zhishu++;
 9         }
10         x-=p; 
11         if(zhishu==0){//如果是0次方,直接输出。 
12             cout<<"2("<<zhishu<<")";
13         }else if(zhishu==1){//如果是1次方,也直接输出。 
14             cout<<2;
15         }else{//否则,进入递归 
16             cout<<"2(";
17             dg(zhishu);
18             cout<<")";
19         }
20         if(x>0){//除了最后一位,其余输出“+". 
21             cout<<"+";
22         }
23     }
24 }
25 int main(){
26     int n;
27     cin>>n;
28     dg(n);
29 return 0;
30 }

2、“难吃”的奶酪:P1433 吃奶酪

  这道题目挺有意思的,就仔细研究起来,但是尝试了几种办法之后,都是失败。最后看了一位网上大佬的思路,豁然开朗,真是厉害。自己尝试着编写自己的代码。基本上样例输入输出都没问题,但就是最后一组数据总是超时超限,尝试修改了几次也是不行。看来还是那里没弄清楚。还请各位高手们多多指教啊。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 using namespace std;
 5 int n,l[1003];
 6 double sum;
 7 double r[1003][1003];
 8 struct node{
 9     double x;
10     double y;
11 }zb[1003];
12 void f(int zg,int sz,double cd){
13     if(cd>sum){
14         return;
15     }
16     if(zg==n){
17         sum=min(sum,cd);
18         return;
19     } 
20     for(int i=1;i<=n;i++)
21         if(!l[i])
22         {
23             l[i]=1;
24             f(zg+1,i,cd+r[sz][i]);
25             l[i]=0;
26         }
27 } 
28 int main(){
29      scanf("%d",&n);
30     for(int i=1;i<=n;i++){
31      scanf("%lf%lf", &zb[i].x, &zb[i].y);
32     } 
33     zb[0].x=0;
34     zb[0].y=0;
35     for(int i=0;i<n;i++)
36         for(int j=i+1;j<=n;j++)
37             r[i][j]=r[j][i]=sqrt((zb[i].x-zb[j].x)*(zb[i].x-zb[j].x)+(zb[i].y-zb[j].y)*(zb[i].y-zb[j].y));
38     sum=99999999.9; 
39     f(0,0,0);
40     printf("%.2lf
",sum);
41     return 0;
42 return 0;
43 }

        总结:加入团队一周的时间里,让我认识了很多大佬级的朋友,也学到了很多很多东西。真心佩服,他们真的太厉害了!我这几天也刷了不少题目。虽然有时候花费几个小时研究几道题,但是还是觉得收获颇丰,很开心。虽然我接触c++还不到一年,但是觉得编程还是挺神奇的。我也相信只要坚持学下去,我也一定会越来越厉害的。也期盼着能继续在团队里,向大家学习。

原文地址:https://www.cnblogs.com/yanxinyi-cpp/p/12895707.html