第十六周OJ题目

来源:互联网 发布:程序员机械键盘推荐 编辑:程序博客网 时间:2024/06/06 19:37

问题及代码(一)逆序输出数组:

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All   rights  reserved.*文件名称:main.cpp*作        者:黄艳*完成日期:2014年12月15日*版 本 号:v1.0**问题描述:下面的程序,采用指针访问的方式,从键盘给数组a[N]输入n个数据(n小于100),然后对元素值按逆序存放后输出。请补充完整下面的程序。*输入描述:共n+1个整数,先输入n值,再输入n个整数*程序输出:与输入顺序正好相反的n个整数*/#include <iostream>using namespace std;const int N=100;int main(){    int a[N],*p,*q,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;}

运行结果:


问题及代码(二)判断是否有相同数字:

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All   rights  reserved.*文件名称:main.cpp*作        者:黄艳*完成日期:2014年12月15日*版 本 号:v1.0**问题描述:输入两个数组中要存放的元素个数及元素值(不超过50个),判断这两个数组中是否有相同的数字。*输入描述:输入两个数组中要存放的元素个数及元素值(不超过50个).*程序输出:有相同数字即输出YES,否则输出NO.*/#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;    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;    for(p=a; p<(a+n1); p++)  //只要有一对相同即返回true    {        for(q=b; q<(b+n2); q++)            if(*p==*q)                return true;    }}


运行结果:


问题及代码(三)相同的数字:

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All   rights  reserved.*文件名称:main.cpp*作        者:黄艳*完成日期:2014年12月15日*版 本 号:v1.0**问题描述:输出两个有序数列(不超过50个)中有多少相同数据,并输出这些数据。*输入描述:第一行输入这两组数的个数(不超过50个)。后面两行分别输入这两组数。同一序列中的数字不会重复。*程序输出:第一行输出相同数字的个数,第二行输出这些相同的数字。若没有相同的数字,输出NULL.*/#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,j, n1, n2, n3;    cin>>n1>>n2;    for(i=0; i<n1; i++) //读入数据    {        cin>>a[i];        for(j=0; j<i; j++)  //判断输入数据是否重复            if(a[i]==a[j])                cin>>a[i];    }    for(i=0; i<n2; i++)    {        cin>>b[i];        for(j=0; j<i; j++)  //判断输入数据是否重复            if(a[i]==a[j])                cin>>a[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)  //自定义函数,判断有多少个相同数字,并将相同数字存入c数组{    int *p,*q,i=0;    for(p=a; p<(a+n1); p++)    {        for(q=b; q<(b+n2); q++)            if(*p==*q)            {                c[i]=*p;                i++;            }    }    return i;}

运行结果:


问题及代码(四)指针引出奇数因子:

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All   rights  reserved.*文件名称:main.cpp*作        者:黄艳*完成日期:2014年12月15日*版 本 号:v1.0**问题描述:编写函数 int fun(int x, int *pp)。其功能是,求出x的所有奇数因子,并按照从小到大的顺序放在pp指向的内存中,函数返回值为这些整数的个数。若x的值为30,数组中的数为1,3,5,15,函数返回4。*输入描述:输入一个整数。*程序输出:输出奇数因子的个数和奇数因子。*/#include<iostream>using namespace std;int fun(int x,int *pp);  //自定义函数声明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;}int fun(int x,int *pp)  //求出x的所有奇数因子,并使其从小到大存入a数组{    int i,m=0;    for(i=1; i<=x; i++)    {        if(x%i==0)            if(i%2!=0)            {                pp[m]=i;                m++;            }    }    return m;}


运行结果:




0 0
原创粉丝点击