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