2014秋C++第16周 OJ题目参考

时间:2023-01-28 08:57:31
课程主页在 http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在 云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 


Problem A: 逆序输出数组

Description

下面的程序,采用指针访问的方式,从键盘给数组a[N]输入n个数据(n小于100),然后对元素值按逆序存放后输出。请补充完整下面的程序。
#include <iostream>
using namespace std;
const int N=100;
int main()
{
    int a[N],*p,*q;
    cin>>n;
    for(p=a; p<___(1)____; p++)
        ___(2)___;
    p=__(3)____;
    q=___(4)_____;
    while(p<q)
    {
        int r=*p;
        *p=*q;
        *q=r;
        ___(5)___;
        ___(6)___;
    }
    for(p=a; p<a+n; p++)
        cout<<*p<<' ';
    cout<<endl;
}

Input

共n+1个整数,先输入n值,再输入n个整数

Output

与输入顺序正好相反的n个整数

Sample Input

8 2 5 1 9 6 3 2 7

Sample Output

7 2 3 6 9 1 5 2

HINT

#include <iostream>using namespace std;const int N=100;int main(){    int a[N],*p,*q;    int n;    cin>>n;    for(p=a; p<a+n; p++)        cin>>*p;    p=a;    q=a+n-1;    while(p<q)    {        int r=*p;        *p=*q;        *q=r;        p++;        q--;    }    for(p=a; p<a+n; p++)        cout<<*p<<' ';    cout<<endl;    return 0;}

Problem B: 有相同数字?

Description

输入两个数组中要存放的元素个数及元素值(不超过50个),判断这两个数组中是否有相同的数字。
在下面的程序基础上完成:
#include<iostream>
using namespace std;
bool existthesame(int *a,int n1,int *b,int n2); //n1个数据的a数组中和n2个数据的b数组中是否有相同元素
int main()
{
    int a[50];
    int b[50];
    int i, n1, n2;
    //读入数据
    ……
    bool flag=existthesame(a,n1,b,n2);
    if(flag==true)
        cout<<"YES\n";
    else
        cout<<"NO\n";
    return 0;
}
bool existthesame(int *a,int n1,int *b,int n2)
{
 
}

Input

共有两组数。每组数包括:这组数的个数n,以及这n个数字。(n<=50)

Output

当两组数中有相同数字时,输出YES,否则,输出NO

Sample Input

6 1 7 8 10 12 174 2 7 12 25

Sample Output

YES

HINT

#include<iostream>using namespace std;bool existthesame(int *a,int n1,int *b,int n2);int main(){    int a[50];    int b[50];    int i, n1, n2;    cin>>n1;    for(i=0; i<n1; i++)        cin>>a[i];    cin>>n2;    for(i=0; i<n2; i++)        cin>>b[i];    bool flag=existthesame(a,n1,b,n2);    if(flag==true)        cout<<"YES\n";    else        cout<<"NO\n";    return 0;}bool existthesame(int *a,int n1,int *b,int n2){    int *p,*q;    bool same=false;    //将两个数组(指针指向的两组值)中的元素两两比较,直至发现有一个是想同的    for(p=a; p<a+n1&&!same; ++p) //循环结束条件如是写可以及时终止循环    {        for(q=b; q<b+n2&&!same; ++q)            if (*p==*q)                same=true;    }    return same;}

Problem C: 相同的数字!

Description

输出两个有序数列(不超过50个)中有多少相同数据,并输出这些数据。
在下面的程序基础上完成:
int sameNum(int *a,int n1,int *b,int n2, int *c);
int main()
{
    int a[50];
    int b[50];
    int c[50];
    int i, n1, n2, n3;
    //读入数据
    ……
    n3 = sameNum(a,n1,b,n2,c);
    if(n3==0)
        cout<<"NULL\n";
    else
    {
        cout<<n3<<endl;
        for(i=0; i<n3; i++)
            cout<<c[i]<<" ";
        cout<<endl;
    }
    return 0;
}
int sameNum(int *a,int n1,int *b,int n2, int *c)
{
}

Input

第一行输入这两组数的个数(不超过50个)。
后面两行分别输入这两组数。同一序列中的数字不会重复。

Output

第一行输出相同数字的个数,第二行输出这些相同的数字。
若没有相同的数字,输出NULL

Sample Input

7 9 1 3 4 6 9 12 172 3 6 8 10 12 15 19 21

Sample Output

33 6 12

HINT

#include<iostream>using namespace std;int sameNum(int *a,int n1,int *b,int n2, int *c);int main(){    int a[50];    int b[50];    int c[50];    int i, n1, n2, n3;    cin>>n1>>n2;    for(i=0; i<n1; i++)        cin>>a[i];    for(i=0; i<n2; i++)        cin>>b[i];    n3 = sameNum(a,n1,b,n2,c);    if(n3==0)        cout<<"NULL\n";    else    {        cout<<n3<<endl;        for(i=0; i<n3; i++)            cout<<c[i]<<" ";        cout<<endl;    }    return 0;}int sameNum(int *a,int n1,int *b,int n2, int *c){    int *p,*q, n=0;    p=a;    q=b;    while( p<a+n1&&q<b+n2 )    {        if(*p==*q)        {            c[n++]=*p;            ++p;            ++q;        }        else if(*p<*q)            ++p;        else            ++q;    }    return n;}

Problem D: 指针引出奇数因子

Description

编写函数 int fun(int x, int *pp)。其功能是,求出x的所有奇数因子,并按照从小到大的顺序放在pp指向的内存中,函数返回值为这些整数的个数。若x的值为30,数组中的数为1,3,5,15,函数返回4。
用下面的main()函数进行测试:
int main()
{
    int a[50],x,n;
    cin>>x;
    n=fun(x,a);
    cout<<n<<endl;
    for(int i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

Input

一个整数

Output

输入的整数的奇因子个数,以及这些奇因子

Sample Input

30

Sample Output

41 3 5 15

HINT

#include<iostream>using namespace std;int fun(int,int *);int main(){    int a[50],x,n;    cin>>x;    n=fun(x,a);    cout<<n<<endl;    for(int i=0; i<n; i++)        cout<<a[i]<<" ";    cout<<endl;    return 0;}//下面定义fun函数int fun(int x,int *p){    int i=3,num=1;    *p++=1;  // 1一定是奇因子,记录后,指针后移一单元    while(i<x)    {        if(x%i==0)        {            *p++=i;  //i是奇因子,记录后,指针后移一单元            ++num;   //个数增加1        }        i+=2;    }    return num;}






=================== 迂者 贺利坚 CSDN博客专栏=================|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==||== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==||== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====