把整数分解为连续整数之和(难度:normal 注意优化)


输入:35
输出: 2,3,4,5,6,7,8
5,6,7,8,9
17,18

以上都是连续的整数,也许大家第一想到的是穷举法,呵呵 ,大家可以先试试

下面给出自己的算法

Code:
  1. #include<stdio.h>
  2. intmain(void)
  3. {
  4. intn,nSum=1;//nSum保存总和
  5. scanf("%d",&n);//输入要分解的n
  6. for(intn1=1,n2=n1;n1<=n/2;)//n1为最开头的数,n2是最末尾
  7. {
  8. if(nSum<n)//总和偏小
  9. {
  10. n2++;//末尾加数
  11. nSum+=n2;
  12. }
  13. elseif(nSum>n)//总和偏大
  14. {
  15. nSum-=n1;//开头删数
  16. n1++;
  17. }
  18. else//if(nSum==n)//相等就输出结果
  19. {
  20. for(intt=n1;t<=n2;t++)
  21. {
  22. printf("%d,",t);
  23. }
  24. printf("/n");
  25. n2++;//末尾加数,如果不加就会死循环
  26. nSum+=n2;//这步要小心
  27. }
  28. }
  29. return0;
  30. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`pcl::PointCloud<pcl::Normal>` 是 PCL(点云库)中表示法线信息的数据结构。它用于存储点云中每个点的法线向量。 `pcl::PointCloud<pcl::Normal>` 是一个模板类,其中的类型参数 `<pcl::Normal>` 表示每个点的数据类型是 `pcl::Normal`,即表示法线的数据类型。 `pcl::Normal` 类包含了三个成员变量:`normal_x`、`normal_y` 和 `normal_z`,分别表示法线向量在 x、y、z 方向上的分量。 你可以使用 `pcl::PointCloud<pcl::Normal>` 对象来存储点云中每个点的法线信息。例如,你可以定义一个 `pcl::PointCloud<pcl::Normal>` 对象来存储一个点云的法线数据: ```cpp #include <pcl/point_types.h> #include <pcl/point_cloud.h> // 定义一个包含法线信息的点云对象 pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>); // 填充法线数据 pcl::Normal normal1; normal1.normal_x = 0.0; normal1.normal_y = 0.0; normal1.normal_z = 1.0; normals->push_back(normal1); pcl::Normal normal2; normal2.normal_x = 0.0; normal2.normal_y = 1.0; normal2.normal_z = 0.0; normals->push_back(normal2); // 访问法线数据 for (const auto& normal : normals->points) { std::cout << "Normal: (" << normal.normal_x << ", " << normal.normal_y << ", " << normal.normal_z << ")" << std::endl; } ``` 在这个示例中,我们首先定义了一个 `pcl::PointCloud<pcl::Normal>` 对象 `normals` 来存储法线信息。 然后,我们创建了两个 `pcl::Normal` 对象 `normal1` 和 `normal2`,并分别为它们的成员变量赋值。 接下来,我们使用 `push_back` 函数将 `normal1` 和 `normal2` 添加到 `normals` 点云对象中。 最后,我们可以使用循环遍历 `normals->points` 来访问每个法线数据,并打印出其 x、y、z 分量。 注意,在使用 `pcl::PointCloud<pcl::Normal>` 时,需要包含相应的头文件 `<pcl/point_types.h>` 和 `<pcl/point_cloud.h>`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值