[ostream_iterator]输出Fibonacci数列

描述

Fibonacci数列指的是数列第一项和第二项为1,之后每一项是之前两项的和所构成的数列。 现有多组数据,每组数据给出一个数字n,请你输出Fibonacci数列的前n-1项。

#include <iostream>
#include <iterator>
using namespace std;template<class T1, class T2>
void Copy(T1 s, T1 e, T2 x) {for(; s != e; ++s, ++x)*x = *s;
}
// 在此处补充你的代码
int main() {while(true) {int n;cin >> n;if(n == 0)break;Fib f1(1), f2(n);ostream_iterator<int> it(cout, " ");Copy(f1, f2, it);cout << endl;}return 0;
}

输入

每组数据一行,整数n
输入以0结尾

输出

对每组数据输出前 n-1项

样例输入

3
0

样例输出

1 1
解题分析

先介绍一下<ostream_iterator>类型。

ostream_iterator 是 C++ 标准库中的一个模板类,属于 <iterator> 头文件。它是一种输出迭代器,用来将值写入到输出流中,如标准输出流(std::cout)、文件流等。ostream_iterator 是处理输出流的一种便捷方式,尤其在与算法库结合使用时。

基本用法

ostream_iterator 的模板声明如下:

template <class T, class charT = char, class traits = std::char_traits<charT>>
class ostream_iterator;

这里:

  • T 是要输出的数据类型。
  • charT 是字符类型,默认为 char
  • traits 是字符特征类型,默认为 std::char_traits<char>,它提供字符处理的基本服务。

构造函数

ostream_iterator 主要有两个构造函数:

  1. 指定输出流和分隔符:

ostream_iterator(ostream_type& s, const charT* delimiter = 0);

       其中 s 是输出流的引用,delimiter 是可选的字符串,指定每次输出后插入的分隔符。

     2.拷贝构造函数:

ostream_iterator(const ostream_iterator& other);

 以下是使用 ostream_iterator 输出一组整数的例子:

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>int main() {std::vector<int> nums = {1, 2, 3, 4, 5};// 创建一个 ostream_iterator 对象,关联到 std::cout,元素之间用空格分隔std::ostream_iterator<int> out_it(std::cout, " ");// 使用 copy 算法输出 nums 中的所有元素std::copy(nums.begin(), nums.end(), out_it);return 0;
}

输出结果为:

1 2 3 4 5 

ostream_iterator 通常用于:

  • 将容器中的内容输出到控制台或文件。
  • 在使用标准算法如 std::copystd::transform 等时,作为一种方便的输出手段。

总之,ostream_iterator 提供了一种简单的方法来将数据从容器或算法直接输出到各种流中。

代码演示
#include <iostream>
#include <iterator>
using namespace std;template<class T1, class T2>
void Copy(T1 s, T1 e, T2 x) {for(; s != e; ++s, ++x)*x = *s;
}long long fib[500]={0};
struct Fib
{int n;long long int num;Fib(int a) : n(a){if(fib[n]){num=fib[n];}else{fib[1]=fib[2]=1;for(int i=3;i<=n;i++){fib[i]=fib[i-1]+fib[i-2];}num=fib[n];}}long long int operator*(){return num;}bool operator!=(const Fib& b){return n!=b.n;}void operator++(){n++;if(fib[n]){num=fib[n];}else{fib[1]=fib[2]=1;for(int i=3;i<=n;i++){fib[i]=fib[i-1]+fib[i-2];}num=fib[n];}}
};int main() {while(true) {int n;cin >> n;if(n == 0)break;Fib f1(1), f2(n);ostream_iterator<int> it(cout, " ");Copy(f1, f2, it);cout << endl;}return 0;
}

注意重载Fib类中的*运算符和++运算符即可。

下面附上大整数实现版本:
 

#include <iostream>
#include <iterator>
using namespace std;template<class T1, class T2>
void Copy(T1 s, T1 e, T2 x) {for(; s != e; ++s, ++x){*x = *s;}
}struct Bigint{string num;Bigint():num("0"){}Bigint(const char* s) : num(s) {}Bigint(string s) : num(s) {}Bigint(int n){if(n==0){num="0";}else{while(n){num=char(n%10+'0')+num;n/=10;}}}Bigint operator+(const Bigint& o){int a[1000]={0},b[1000]={0},c[1000]={0};int len1=num.size();int len2=o.num.size();for(int i=0,j=len1-1;j>=0;i++,j--){a[i]=num[j]-'0';}for(int i=0,j=len2-1;j>=0;i++,j--){b[i]=o.num[j]-'0';}int len=max(len1,len2)+3;int tmp=0;for(int i=0;i<len;i++){c[i]=a[i]+b[i]+tmp;tmp=c[i]/10;c[i]%=10;}if(tmp){c[len]=tmp;}int pos=len;while(c[pos]==0){pos--;}string ans;for(int i=pos;i>=0;i--){ans+=char(c[i]+'0');}return Bigint(ans);}operator bool(){return num!="0";}bool operator!=(const Bigint& a){return num!=a.num;}friend ostream& operator<<(ostream& o,const Bigint& a){o<<a.num;return o;}void operator=(const Bigint& o){num=o.num;}operator int(){return stoi(num);}
};Bigint fib[500]={"0","1","1"};
struct Fib
{int n;Bigint num;Fib(int a) : n(a){if(fib[n]){num=fib[n];}else{for(int i=3;i<=n;i++){fib[i]=fib[i-1]+fib[i-2];}num=fib[n];}}Bigint operator*(){return num;}bool operator!=(const Fib& b){return n!=b.n;}void operator++(){n++;if(fib[n]){num=fib[n];}else{for(int i=3;i<=n;i++){fib[i]=fib[i-1]+fib[i-2];}num=fib[n];}}
};int main() {while(true) {int n;cin >> n;if(n == 0)break;Fib f1(1), f2(n);ostream_iterator<string> it(cout, " ");Copy(f1, f2, it);cout << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 GAS开发P32,33 初始化状态并绑定在HUD上,拾取物品增加血量和减少蓝量

这节课主要是修改WidgetController和OverlayController,在EffectActor内新增了一个减少蓝量的代码,同时修复了一个bug,并且展示了为什么要写成单独的控制器,因为要考虑多人游戏的情况,每一个控制器都是一个单独的角色 首先修改AuraAttirbuteSet.cpp UAuraAttributeSet::UAura…

【C++】unordered_map unordered_set 底层刨析

文章目录 1. 哈希表的改造2. unordered_map3. unordered_set C STL 库中&#xff0c;unordered_map 和 unordered_set 容器的底层为哈希表&#xff0c;本文将简单模拟哈希表&#xff08;哈希桶&#xff09;&#xff0c;unordered_map 和 unordered_set 只需封装哈希表的接口即可…

C语言中static变量和普通变量有什么区别?

下面将从变量的存储周期和可见性&#xff0c;以及函数的链接属性等方面展开 1. static全局变量和普通全局变量有什么区别? static全局变量和普通全局变量都存储在静态存储区, 生命周期都是整个文件运行结束 但是, 普通全局变量在所有源文件中都是可见的, 如果一个源文件中定…

kylin Firefox Warning: Potential Security Risk Ahead

Warning: Potential Security Risk Ahead &#xfeff; Firefox detected a potential security threat and did not continue to 127.0.0.1. If you visit this site, attackers could try to steal information like your passwords, emails, or credit card details. 警告&…

java实现简单图书管理系统(附带源码)

项目要求 该项目会用到类和对象&#xff0c;封装、继承、多态、接口、等&#xff0c;会帮你巩固并加强这类知识 设计要求及思路 1.要求有两套系统分别给管理员和普通用户使用&#xff0c;经过开始的选择会有两个对应功能不同的菜单&#xff0c;这里两种角色我们可以放一个包…

华为ensp中nat地址转换(静态nat 动态nat NAPT 和Easy IP)配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月15日12点03分 实验拓扑 接下来我会分几个方面初步将静态nat和napt easy ip 首先基本的环境配置 AR1的基本配置 //基本的IP配置和默认路由指向外网 <Huawei&…

神仙级Python入门教程(超级详细),从零基础入门到精通,从看这篇开始

一、初聊Python 1.为什么要学习Python&#xff1f; 在学习Python之前&#xff0c;你不要担心自己没基础或“脑子笨”&#xff0c;我始终认为&#xff0c;只要你想学并为之努力&#xff0c;就能学好&#xff0c;就能用Python去做很多事情。在这个喧嚣的时代&#xff0c;很多技…

linux 数据链路层 socket编程 广播

在Linux系统中&#xff0c;要进行数据链路层的socket编程&#xff0c;并发送广播包&#xff0c;你可以使用原始套接字&#xff08;raw socket&#xff09;&#xff0c;并将IP头设置为广播地址。以下是一个简单的例子&#xff0c;展示如何使用原始套接字在数据链路层发送广播包&…

分布式锁介绍

引言 分布式锁是一种用于协调不同进程或线程对共享资源的访问控制的机制。在分布式系统中&#xff0c;由于多个节点可能同时访问或修改同一资源&#xff0c;因此需要一个中心化的协调机制来确保资源的访问是有序的&#xff0c;避免数据不一致的问题。 分布式锁的特性&#xf…

电子元器件供应链的优化与改进

优化和改进电子元器件供应链是确保企业竞争力和业务成功的关键一步。以下是一些优化和改进电子元器件供应链的方法&#xff1a;      供应链网络设计&#xff1a; 重新评估和优化供应链网络&#xff0c;确定最佳的供应商和分销商位置&#xff0c;以最大程度地降低成本、提高…

Java反序列化-(LazyMap)CC1链与CC6链

(LazyMap)CC1链 原版的CC1链&#xff1a; https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java可以发现对比之前的 TransformMap版本的CC1链&#xff0c;从这里开始就不一样了 分析LazyMap.get() 直接进入到Laz…

OnlyOffice配置minio文件存储

OnlyOffice配置minio文件存储 一、部署minio测试环境 拉取minio镜像 为了快速验证&#xff0c;此处使用docker安装部署minio服务。先拉取minio最新版镜像资源。 -bash-4.2# docker pull minio/minio:latest -bash-4.2# docker images | grep minio minio/minio …

企业业务系统与呼叫中心话务系统的无缝对接实现方案

在当今的商业环境中&#xff0c;企业的业务系统与呼叫中心话务系统的对接显得尤为重要。这种对接不仅提高了企业的运营效率&#xff0c;还增强了客户服务的体验。本文将探讨如何实现企业业务系统与呼叫中心话务系统的无缝对接&#xff0c;并分析其带来的好处。 一、对接的必要性…

用html写一个有趣的鬼魂动画

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>一个有趣的鬼魂动画</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.m…

2024第十五届蓝桥杯 JAVA B组

目录 前言&#xff1a;试题 A: 报数游戏试题 B: 类斐波那契循环数试题C:分布式队列 前言&#xff1a; 没参加这次蓝桥杯算法赛&#xff0c;十四届蓝桥杯被狂虐&#xff0c;对算法又爱又恨&#xff0c;爱我会做的题&#xff0c;痛恨我连题都读不懂的题&#x1f62d;,十四届填空只…

深度解析:国内实时音视频厂商核心功能对比

当前实时音视频开发领域呈现出多样化竞争态势&#xff0c;其中声网&#xff08;Agora&#xff09;、即构&#xff08;ZEGO&#xff09;等云通讯企业占据了市场的主导地位。随着技术的持续进步和用户需求的日益多样化&#xff0c;选择音视频服务提供商的标准也越来越个性化&…

如何在Linux系统部署Joplin笔记并结合内网穿透实现无公网IP远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

简单粗暴解决 wampapache 突然无法启动错误1053

问题是因为没有安装:vc_redist_x64 导致的 全网最简单粗暴解决下 DirectX_v4.1修复

注意力的本质

目录 Attention 的本质是什么 AI 领域的 Attention 机制 Attention 的3大优点 Attention 的原理 小故事讲解 Attention 原理的3步分解:</

芯来科技、IAR和MachineWare携手加速符合ASIL标准RISC-V汽车芯片创新

支持软件开发团队在虚拟硬件平台上进行固件和MCAL开发 芯来科技&#xff08;Nuclei&#xff09;、IAR和MachineWare紧密合作&#xff0c;加速RISC-V ASIL合规汽车解决方案的创新。此次合作简化了汽车电子的固件和MCAL开发&#xff0c;提供了虚拟和物理硬件平台之间的无缝集成。…