课程主页在 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 17
4 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 17
2 3 6 8 10 12 15 19 21

Sample Output

3
3 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

4
1 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菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====