第三次训练题解题报告

本次解题实在是状况不断……有时候有思路但是在编写代码的过程中往往就乱掉了。最后编译出来的时候,往往编译没有错但是结果总是不对。
我觉得是我的限时快速编程经验过少。不集中注意力,思路容易乱,所以编出来能运行的程序,但是程序不能做出相应的功能……
这是大忌。



A -  The 3n + 1 problem 
解题:
  1. 我的思路是,先判断i,j大小,如果i>j就把他俩的值调换。然后进行for循环,让循环变量a从i循环到j。
  2. 预先定义两个变量m,n;在循环中使用。在定义一个变量k,每次循环记下a的值,然后对k进行题目中的操作,每操作一次,累加器m就+1,(m初值为1)。当对k操作完毕时(k==1),m的值就是操作的次数。n的初值也为1,在while循环中。它的目的是记下进行过的for循环中,m出现过的最大值。 if(m>n) n=m;   //最后输出也是输出n。
  3. 因为程序中i和j的值可能有交换,故我定义一个变量flag记下i和j是否进行了交换。(flag==0则他们没有交换过)。若他们交换过,在输出值之前我要再把i,j换回来。
  4. 以上。

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. void main(void)
  3. {
  4.     int i,j,n,m,k,a,flag=0;
  5.     while(scanf("%d%d",&i,&j)!=EOF)
  6.     {
  7.         if(i>j)
  8.         {
  9.             n=i;i=j;j=n;
  10.             flag=1;
  11.         }
  12.         n=1;
  13.         for(a=i;a<=j;a++)
  14.         {
  15.             m=1;
  16.             k=a;
  17.             while(k!=1)
  18.             {
  19.                 if((k/2)==((k-1)/2))
  20.                     k=3*k+1;
  21.                 else
  22.                     k=k/2;
  23.                 m++;
  24.             }
  25.             if(m>n) n=m;
  26.         }
  27.         if(flag==0)
  28.             printf("%d %d %d\n",i,j,n);
  29.         else
  30.             printf("%d %d %d\n",j,i,n);
  31.     }
  32. }

B -  THE DRUNK JAILER
解题:【逃跑问题】
  1. 本程序采用动态申请内存的方法申请整型数组。节省空间。
  2. cha()函数是根据a的值,进行0,1交换。。。
  3. 这样程序思路就很明显了。
  4. 输入case个数N之后,就进入while(N--)循环了。
  5. 首先对数组初始化,值全为1.
  6. 循环内嵌套for循环(循环变量j从2到n),for循环中对数组进行遍历,对于j的倍数,进行cha()函数的值更新。
  7. 最后在此遍历数组,用累加器累加出数组内的1值即可。

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int cha(int a)
  3. {
  4.     if(a) return 0;
  5.     else return 1;
  6. }

  7. int main()
  8. {
  9.     int n,i,j,N;
  10.     scanf("%d",&N);
  11.     while(N--)
  12.     {
  13.         scanf("%d",&n);
  14.         int *p=new int[n];
  15.         for(i=0;i<n;i++)
  16.             p[i]=1;
  17.         for(j=2;j<=n;j++)
  18.         {
  19.             for(i=0;i<n;i++)
  20.                 if((i+1)%j==0)
  21.                     p[i]=cha(p[i]);
  22.         }
  23.         j=0;
  24.         for(i=0;i<n;i++)
  25.         {
  26.             if(p[i])
  27.                 j++;
  28.         }
  29.         printf("%d\n",j);
  30.     }
  31.     return 0;
  32. }
C -  Quicksum
解题:{这次读题疏忽,这是第一次不应该犯的错误。忽略了值的范围0-255。所以第一次定义为s[30]造成结果错。}

题目思路简单,位置可以通过数字元素下标+1得出,而字母在字母表中的顺序,可以通过相应ASCII码-64转换得出。故此题关键在于怎么回避空格问题。空格值为0,故加一条判断语句跳过空格继续累加即可。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     char s[300];
  6.     int i,sum=0;
  7.     gets(s);
  8.     while(strcmp(s,"#"))
  9.     {
  10.         sum=0;
  11.         for(i=0;s[i];i++)
  12.             if(s[i]!=' ')
  13.                 sum+=(i+1)*(s[i]-64);
  14.         printf("%d\n",sum);
  15.         gets(s);
  16.     }
  17.     return 0;
  18. }
D -  Above Average
解题:
  1. 首先要注意最后输出格式保留三位小数。  "%.3f%%"。
  2. 为了尽量减少变量的申请。两个变量conc(最后的百分数)和ave平均数有两个功能。
  3. 再累加的时候,ave是累加器。最后通过ave/=n得出平均数。
  4. conc先是表示小数的比例,在最后通过乘以100转化为百分值。
  5. 以上。

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int c,n,a[1000],i;
  5.     float conc,ave;
  6.     scanf("%d",&c);
  7.     while(c--)
  8.     {
  9.         scanf("%d",&n);
  10.         ave=0;
  11.         for(i=0;i<n;i++)
  12.         {
  13.             scanf("%d",&a[i]);
  14.             ave+=a[i];
  15.         }
  16.         ave/=n;
  17.         conc=0;
  18.         for(i=0;i<n;i++)
  19.             if(a[i]>ave)
  20.                 conc++;
  21.         conc=100*conc/n;
  22.         printf("%.3f%%\n",conc);
  23.     }
  24. }
E -  排列
解题:第一次遇见中文题~~~XD
  1. 全排列问题。我再次第二次遇到问题。因为全排列函数第一次碰到。思路完全乱了。
  2. 当知道全排列函数是可以从头继续排的时候,一切都豁然开朗了。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <algorithm>

  4. int a[1030];
  5. using namespace std;

  6. int cmp(const void *a,const void *b)
  7. {
  8.     return *(int *)a-*(int *)b;
  9. }

  10. int main()
  11. {
  12.     int m,n,i,k;
  13.     scanf("%d",&m);
  14.     while(m--)
  15.     {
  16.         scanf("%d%d",&n,&k);
  17.         for(i=0;i<n;i++) scanf("%d",&a[i]);
  18.         do
  19.         {
  20.             k--;
  21.         }while(next_permutation(a,a+n)&&k);
  22.         
  23.         if(k)
  24.         {
  25.             qsort(a,n,sizeof(a[0]),cmp);
  26.             do
  27.             {
  28.                 k--;
  29.                 next_permutation(a,a+n);
  30.             }while(k);
  31.             for(i=0;i<n;i++) printf("%d ",a[i]);
  32.             printf("\n");
  33.         }
  34.         else
  35.         {
  36.             for(i=0;i<n;i++) printf("%d ",a[i]);
  37.             printf("\n");
  38.         }
  39.     }
  40.     return 0;
  41. }
F -  Soundex
解题:用子函数,思路会更加清晰。在此我又遇到了问题。return 2;那一句我居然把字母Z忘了。活该做不出来。
  1. 剩下的思路路都还挺简单的,为了避免数字重复的问题。sound(s[i])!=sound(s[i-1])  这一句就可以解决。
  2. 以上。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int sound(char c)
  5. {
  6.     if(c=='B'||c=='F'||c=='P'||c=='V') return 1;
  7.     if(c=='C'||c=='G'||c=='J'||c=='K'||c=='Q'||c=='S'||c=='X'||c=='Z') return 2;
  8.     if(c=='D'||c=='T') return 3;
  9.     if(c=='L') return 4;
  10.     if(c=='M'||c=='N') return 5;
  11.     if(c=='R') return 6;
  12.     return 0;
  13. }

  14. int main()
  15. {
  16.     char s[25];
  17.     int i;
  18.     while(gets(s))
  19.     {
  20.         for(i=0;s[i];i++)
  21.         {
  22.             if(sound(s[i])&&sound(s[i])!=sound(s[i-1]))
  23.             {
  24.                 printf("%d",sound(s[i]));
  25.             }
  26.         }
  27.         printf("\n");
  28.     }
  29. }

阅读(50) | 评论(0) | 转发(0) |
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问 目标检测涉及以下几个核心问: 分类问:判断图像中的目标属于哪个类别。 定位问:确定目标在图像中的具体位置。 大小问:目标可能具有不同的大小。 形状问:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值