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