注册 登录
编程论坛 C++教室

关于c++的函数问题

a181625133 发布于 2018-01-31 22:40, 6107 次点击
题目描述

 
打印下面数列的前 N 项。
 
1    4     10     19     31     46….

输入

 
第一行 1 个整数 n,范围在[1,100]

输出

  一行,N 个整数
50 回复
#2
william20112018-02-02 22:46
写了一个示例,希望能帮助你
#include <stdio.h>
#include <stdlib.h>
int main(void)
 {
     unsigned int n;
     printf("请输入一个正整数n:[1,100]");
     scanf("%d",&n);
     printf("输入数为%d 时,输出序列为:\n", n);     
     for(unsigned int i=1; i<=n; ++i){
        printf("%d ", 1+3*i*(i-1)/2 );
     }
     printf("\n");   
     return 0;
 }   
#3
a1816251332018-02-02 23:32
其实并不是这样的
应该是输入一个n值,输出的是1,4,10,19............
差不多是这样的,但是个半成品,总差一点点:
#include <iostream>
using namespace std;

int n,a,s;

int main()

{   
    cin >>n;
    a=n-1;
    s=a*(a+1)*1.5;
    for(int i=1;i<=n;i=i+s)
    cout <<i<<" ";   
    return 0;
}
#4
a1816251332018-02-02 23:33
但还是不行啊

#5
a1816251332018-02-02 23:35
比如我输入4,他就显示1    4     10     19
#6
william20112018-02-03 08:49
你有没有实际测试过我的程序,并验证结果?为何觉得不是这样的呢?
#7
wengbin2018-02-03 08:58
f(n)=f(n-1)+3(n-1),f(1)=1,用递归实现,比较明了,输入范围不大,空间占用应该还可以容忍
#8
william20112018-02-03 09:00
好吧,好人做到底,严格的c++形式:
#include <iostream>
int main(void)
 {
     unsigned int n;
     cout<<"请输入一个正整数n:[1,100]"<<endl;
     cin>>n;
     cout<<"输入数为%d 时,输出序列为:"<<endl;     
     for(unsigned int i=1; i<=n; ++i){
        cout<<1+3*i*(i-1)/2<<' ';
     }
     cout<<endl;   
     return 0;
 }
#9
william20112018-02-03 09:03
附上代码实际测试结果:
只有本站会员才能查看附件,请 登录

#10
wengbin2018-02-03 09:06
int foo(int i)

    if(1==i)return 1;
    else return foo(i-1)+3*(i-1);

int main()

      //读入要输出的数列数量n
    for(auto i=0;i!=n;i++)std::cout<<foo(i+1);
    return 0;


手机打的,缺的可以完善下
#11
william20112018-02-03 09:12
版主果然是高手
#12
a1816251332018-02-03 21:11
谢谢您的帮助了
我用您的改了一下就成功了
#include <iostream>
using namespace std;
int n;
int main()
 {
     cin>>n;
     for( int i=1; i<=n; i++)
        cout<<1+3*i*(i-1)/2<<" ";   
     return 0;
 }
#13
a1816251332018-02-03 21:14
只有本站会员才能查看附件,请 登录
登登登登
#14
a1816251332018-02-03 21:20
但wengbin先生的却是
只有本站会员才能查看附件,请 登录
#15
a1816251332018-02-03 21:20
????
#16
a1816251332018-02-03 21:24
不过还是谢谢了
#17
a1816251332018-02-03 21:24
#include <iostream>
#include <utility>
class Useless
{
private:
    int n;         
    char * pc;      
    static int ct;  
    void ShowObject() const;
public:
    Useless();
    explicit Useless(int k);
    Useless(int k, char ch);
    Useless(const Useless & f);
    Useless(Useless && f);      
    ~Useless();
    Useless operator+(const Useless & f)const;
    Useless & operator=(const Useless & f);
    Useless & operator=(Useless && f);      
    void ShowData() const;
};

int Useless::ct = 0;

Useless::Useless()
{
    ++ct;
    n = 0;
    pc = nullptr;
 }

Useless::Useless(int k) : n(k)
{
    ++ct;
    pc = new char[n];
}

Useless::Useless(int k, char ch) : n(k)
{
    ++ct;
    pc = new char[n];
    for (int i = 0; i < n; i++)
        pc[i] = ch;
}

Useless::Useless(const Useless & f): n(f.n)
{
    ++ct;
    pc = new char[n];
    for (int i = 0; i < n; i++)
        pc[i] = f.pc[i];
}

Useless::Useless(Useless && f): n(f.n)
{
    ++ct;
    pc = f.pc;      
    f.pc = nullptr;  
    f.n = 0;
}

Useless::~Useless()
{
    delete [] pc;
}

Useless & Useless::operator=(const Useless & f)  
{
    std::cout << "copy assignment operator called:\n";
    if (this == &f)
        return *this;
    delete [] pc;
    n = f.n;
    pc = new char[n];
    for (int i = 0; i < n; i++)
        pc[i] = f.pc[i];
    return *this;
}

Useless & Useless::operator=(Useless && f)      
{
    std::cout << "move assignment operator called:\n";
    if (this == &f)
        return *this;
    delete [] pc;
    n = f.n;
    pc = f.pc;
    f.n = 0;
    f.pc = nullptr;
    return *this;
}

Useless Useless::operator+(const Useless & f)const
{
    Useless temp = Useless(n + f.n);
    for (int i = 0; i < n; i++)
        temp.pc[i] = pc[i];
    for (int i = n; i < temp.n; i++)
        temp.pc[i] = f.pc[i - n];
    return temp;
}

void Useless::ShowObject() const
{
    std::cout << "Number of elements: " << n;
    std::cout << " Data address: " << (void *) pc << std::endl;
}

void Useless::ShowData() const
{
    if (n == 0)
        std::cout << "(object empty)";
    else
        for (int i = 0; i < n; i++)
            std::cout << pc[i];
    std::cout << std::endl;
}

int main()
{
    using std::cout;
    {
        Useless one(10, 'x');
        Useless two = one +one;   
        cout << "object one: ";
        one.ShowData();
        cout << "object two: ";
        two.ShowData();
        Useless three, four;
        cout << "three = one\n";
        three = one;              
        cout << "now object three = ";
        three.ShowData();
        cout << "and object one = ";
        one.ShowData();
        cout << "four = one + two\n";
        four = one + two;         
        four.ShowData();
        cout << "four = move(one)\n";
        four = std::move(one);   
        cout << "now object four = ";
        four.ShowData();
        cout << "and object one = ";
        one.ShowData();
    }
     std::cin.get();
}
#18
a1816251332018-02-03 21:28
不知这个有没有错呢???
#19
a1816251332018-02-03 21:56
对了,还有一个问题
#20
a1816251332018-02-03 21:57
#include <iostream>
using namespace std;
int n;
int main()
 {
     cin>>n;
     for( int i=1; i<=n; i++)
        cout<<在这个地方我想写2的i次方减1,不应该是pow(2,i)-1吗??该怎么写呢?<<" ";   
     return 0;
 }
#21
wengbin2018-02-04 08:16
呃呃……你是新手吧?我手机打打麻烦,所以读入要输出个数的没n没定义也没读的过程,用了个注释让你自己完善的呀,你按我现在的去用能当然不行呀……
#22
wengbin2018-02-04 08:18
2的n次方直接用1<<n就好
#23
wengbin2018-02-04 08:30
另外,我写的那个代码有点问题,应该不用循环的,算f(n)的时候其实已经算了前面所有的,你在foo函数里每个返回值前加上输出语句,打印一下要返回的值,main函数只写一句f(5),看看打印什么,结果贴一下,谢谢,手机没法做这些
#24
a1816251332018-02-04 10:08
嗯,刚开始学的
#25
a1816251332018-02-04 10:10
只有本站会员才能查看附件,请 登录
#26
a1816251332018-02-04 10:11
#include <iostream>
using namespace std;
int n;
int main()
 {
     cin>>n;
     for( int i=1; i<=n; i++)
        cout<<在这个地方我想写2的i次方减1,不应该是pow(2,i)-1吗??该怎么写呢?<<" ";   
     return 0;
 }
#27
a1816251332018-02-04 10:26
还是不行哦
你还是把全部都发上来吧
我有点,不行的
只有本站会员才能查看附件,请 登录
#28
ehszt2018-02-04 12:29
没什么问题,就是括号全是中文
改了一下
#include <iostream>
using namespace std;
int foo(int i)
{
    if(1==i)return 1;
     else return foo(i-1)+3*(i-1);
}
int main()
 {
      //读入要输出的数列数量n
      int n;
      cin>>n;
      for(auto i=0;i!=n;i++)std::cout<<foo(i+1)<<" ";
     return 0;
}
#29
a1816251332018-02-04 13:05
这个地方好像错了吧,ehszt先生
只有本站会员才能查看附件,请 登录
??
我的c++运行器似乎运行不了???
只有本站会员才能查看附件,请 登录
#30
a1816251332018-02-04 13:07
#include <iostream>
using namespace std;
int foo(int i)
{
    if(1==i)return 1;
     else return foo(i-1)+3*(i-1);
}
int main()
 {
      //读入要输出的数列数量n
      int n;
      cin>>n;
      for(int i=0;i!=n;i++)
      std::cout<<foo(i+1)<<" ";
     return 0;
}
我改了一下就行了
不过谢了
应该是这样的吧
#31
a1816251332018-02-04 13:09
只有本站会员才能查看附件,请 登录

这是给wengbin先生的截图
#32
a1816251332018-02-04 16:06
还有一个问题,能教一下我吗
输入一个正整数 N,打印一个对称数列,从 1 到 N,再从 N 到 1。例如: N=4 时,输出: 1 2 3 4 3 2 1
这个我想了好久都没想出来啊
求解
#33
wengbin2018-02-04 17:28
程序代码:

#include <iostream>

int foo(int i)
{
    int n = 0;
    if (1 == i) n = 1;
    else n = foo(i - 1) + 3 * (i - 1);
    std::cout << n << " ";
    return n;
}

int Nprint(int n)
{
    unsigned int i = 1;
    unsigned int N = n - 1;
    while (i < 2*n)
    {
        if (i <= n) std::cout << i << " ";
        else std::cout << N-- << " ";
        i++;
    }
    return 0;
}
int main()
{
    foo(5);// 这里是不用循环的,是递归调用的一个特点
    std::cout << std::endl;
    Nprint(6);
    std::cout << std::endl;
    return 0;
}
#34
a1816251332018-02-04 19:53
好难啊,能教一下吗
#35
a1816251332018-02-04 19:54
看着都晕
#36
a1816251332018-02-04 19:57
还有,似乎不行哦
只有本站会员才能查看附件,请 登录
?wengbin先生
#37
ehszt2018-02-04 20:39
楼主是这个意思吗?
#include <iostream>
using namespace std;
int m[100];
int foo(int i)
{
    int n=0;
    if(1==i) n=1;
     else n=foo(i-1)+3*(i-1);
     cout<<n<<" ";
     m[i]=n;
     return n;
}
int main()
 {
      //读入要输出的数列数量n
      int n;
      cin>>n;
      foo(n);
      for(int i=n-1;i>0;i--)
      cout<<m[i]<<" ";
     return 0;
}
#38
a1816251332018-02-04 21:41
输入一个正整数 N,打印一个对称数列,从 1 到 N,再从 N 到 1。例如: N=4 时,输出: 1 2 3 4 3 2 1

输入

    第一行 1 个整数 N,范围在[1,100]

输出


一行,2N-1 个整数
错了,不过还是感谢你们了
#39
a1816251332018-02-04 22:35
希望能想出好的方法并教一下我
#40
wengbin2018-02-04 23:20
答案都给你了,运行结果你都贴出来了,你说不行是什么意思?输入和输出你调下格式不难吧,主函数调用改成这样
程序代码:
int main()
{
    int i = 0;
    std::cin >> i;
    foo(i);
    std::cout << std::endl;
    int n = 0;
    std:: cin >> n;
    Nprint(n);
    std::cout << std::endl;
    return 0;
}
#41
a1816251332018-02-04 23:30
额,改了之后好像更糟了
只有本站会员才能查看附件,请 登录
#42
a1816251332018-02-04 23:31
I'm a , I don't understand。
#43
wengbin2018-02-04 23:39
程序代码:
#include <iostream>

int foo(int i)
{
    int n = 0;
    if (1 == i) n = 1;
    else n = foo(i - 1) + 3 * (i - 1);
    std::cout << n << " ";
    return n;
}

int Nprint(int n)
{
    unsigned int i = 1;
    unsigned int N = n - 1;
    while (i < 2*n)
    {
        if (i <= n) std::cout << i << " ";
        else std::cout << N-- << " ";
        i++;
    }
    return 0;
}
int main()
{
    int i = 0;
    std::cout<<"这是第一道题的测试用例,输入一个数字,将输出一个数列,现在输入吧,一个数字:";
    std::cin >> i;
    foo(i);
    std::cout << std::endl;
    int n = 0;
    std::cout << "这是第二道题的测试用例,输入一个数字,将输出另一个数列,你说的更糟的那个,是在等你输入这个用例的数字,现在输入吧,一个数字:";
    std:: cin >> n;
    Nprint(n);
    std::cout << std::endl;
    return 0;
}
#44
wengbin2018-02-04 23:39
我这跑,输出的提示是乱码的,你自己跑时如果乱码,就直接输入数字吧
#45
a1816251332018-02-05 10:51
谢了,wengbin先生,我改了一下,你果然厉害,能不能教一下我呀
#include <iostream>

int Nprint(int n)
{
    unsigned int i = 1;
    unsigned int N = n - 1;
    while (i < 2*n)
    {
        if (i <= n) std::cout << i << " ";
        else std::cout << N-- << " ";
        i++;
    }
    return 0;
}
int main()
{
    int n = 0;
    std::cout << "";
    std:: cin >> n;
    Nprint(n);
    std::cout << std::endl;
    return 0;
}
#46
a1816251332018-02-05 21:09
打印下面数列的前 N 项。
10 11 9 12 8 13 7 14 6 15 5 16
输入:第一行 1 个整数 n,范围在[1,100]。
输出:一行,N 个整数。
例如输入12
输出
10 11 9 12 8 13 7 14 6 15 5 16
请看一下,教一下我怎么写

#47
ehszt2018-02-06 09:57
#include <iostream>
int main()
{
    int m=1,N,sign=-1,term=10;
    std:: cin >> N;
    for(;m<=N;m++)
    {
        std::cout<<term<<" ";
        sign=(-1)*sign;
        term=term+sign*m;
    }
    return 0;
}
#48
a1816251332018-02-10 22:21
输入 N 个整数,求其中第 2 大的值。
第一行 1 个整数 N:范围在[2,200]。
第二行 N 个整数:每个整数范围在[-10000000,100000000]
样例输入
4
3 6 1 9
输出
6
求教
#49
a1816251332018-02-10 22:22
我用冒泡循环,但还是不行
#50
a1816251332018-02-10 22:23
#include <iostream>
using namespace std;
int N,ans;
int main()
 {
           using namespace std;

int yams [4]={7,8,6,1};
for(int i=0;i<4;i++)
{
    for(int j=i;j<4;j++)
    {
        if(yams[i]>yams[j])
        {
        int temp=yams[i];
        yams[i]=yams[j];
        yams[j]=temp;
        }
    }
}
cout <<yams[0];
cout <<yams[1];
cout <<yams[2];
cout <<yams[3];
 }
#51
a1816251332018-03-02 23:04
题目描述

输入 N 个不同的整数,记录了滑雪线路的地形高度。要求先从前面走到最高点,再开始向后滑雪,滑雪中如果遇到某个的地形比前面的地形高,就会停止,求滑了多少距离?

输入

第一行 1 个整数 n,范围在[1,100]。 第二行有 n 个[1,10000]范围的整数,整数间用一个空格分隔。

输出

只一个整数,滑雪的距离。

样例输入
8
7 12 8 6 5 4 9 1

样例输出
5
1