数列极差问题.docx
- 文档编号:8132348
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:21
- 大小:19.33KB
数列极差问题.docx
《数列极差问题.docx》由会员分享,可在线阅读,更多相关《数列极差问题.docx(21页珍藏版)》请在冰豆网上搜索。
数列极差问题
数列极差问题
在黑板上写了N个正整数组成的一个数列,进行如下操作:
每次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的为max,最小的为min,则该数列的极差定义为M=max-min。
请你编程,对于给定的数列,计算极差。
输入
输入包含多个测试集。
每个测试集的第一个数N表示正整数序列长度(0<=N<=50000),随后是N个正整数。
N为0表示输入结束。
输出
每个结果一行
输入样例
3
1
2
3
0
输出样例
2
来源:
最新评论发表评论
您尚未登录本站,不能发表评论,请登录或者注册成为本站会员
评论人:
红色的狐狸 发布时间:
2012-3-1115:
06:
06
我觉的每次擦去的两个数为最小的,所得的为最大值,每次擦去的为两个最大的,得到的为最小值;例如:
1 2 3 4 5 =》3 3 4 5=》10 4 5=》10 21=》211得到最大值;1 2 3 4 5=》1 2 3 21=》1 2 64=》1 129=》130得到最小值,差值为211-130=81代码如下:
#include
#include
int Partitition(int *a,int low,int high){
a[0]=a[low];
int pivotkey=a[low];
while(low while(low high--; } a[low]=a[high]; while(low low++; } a[high]=a[low]; } a[low]=a[0]; return low; } void Qsort(int *a,int low,int high){ if(low int pivotkey=Partitition(a,low,high); Qsort(a,low,pivotkey-1); Qsort(a,pivotkey+1,high); } } int Max(int *a,int n){ int i2,t; while(n! =1){ t=a[1]*a[2]+1; i2=3; while(t>a[i2]&&i2<=n){ a[i2-2]=a[i2++]; } a[i2-2]=t; while(i2<=n){ a[i2-1]=a[i2]; i2++; } a[i2-1]=0; n=n-1; } return a[1]; } int Min(int *a,int n){ int i=3; int t=a[1]*a[2]+1; for(;i<=n;i++){ t=a[i]*t+1; } return t; } int main() { int a[100],b[100],n,i=1; int c[10]; printf("请输入测试数n\n"); scanf("%d",&n); if(n<=1){ printf("输入有误"); return 0; } printf("请输入n个测试数\n"); scanf("%d",&a[i]); while(a[i]) scanf("%d",&a[++i]); Qsort(a,1,n); for(i=1;i<=n;i++){ printf("%d ",a[i]); } i=1; for(i=n;i>=1;i--){ b[i]=a[n-i+1]; } int max=Max(a,n); int min=Min(b,n); printf("最大的极差为: %d\n",max-min); return 0; } 评论人: py102356 发布时间: 2011-10-1621: 08: 48 不好意思 有点错误 把最后那个 for(j=1;j { if(min>b[j]) min=b[j]; if(max max=b[j]; } 中的n改为i-1 评论人: py102356 发布时间: 2011-10-1620: 59: 30 #include void fun(int a[],int n,int b[]) { static int i=0; int j,k,m,x; int c[100]; if(n==1) { b[i++]=a[0]; b[i]=0; return ; } for(j=0;j for(k=j+1;k { for(x=0;x c[x]=a[x]; c[j]=c[j]*c[k]+1; for(m=k;m c[m]=c[m+1]; fun(c, n-1,b); } } void main() { int a[100]; int b[1000]; int n,i=0,j; int max,min; printf("输入测试数据个数n: "); scanf("%d",&n); printf("输入数据: "); scanf("%d",&a[i++]); while(a[i-1]) scanf("%d",&a[i++]); fun(a,n,b); i=0; while(b[i++]); max=min=b[0]; for(j=1;j { if(min>b[j]) min=b[j]; if(max max=b[j]; } printf("数列的极差是: %d\n",max-min); } 评论人: py102356 发布时间: 2011-10-1620: 13: 49 算出所有的结果,然后找最大和最小值 评论人: parid 发布时间: 2011-9-1322: 53: 49 #include void sort(int *a, int p) { int i,temp,j; for(i=0;i for(j=0;j { if(a[j]>a[j++]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } int max_num(int *a ,int p) { int i=0,m,n=a[0]; while(i { m=a[i]; m=n; n=a[i+1]; n=m*n+1; i++; } return n; } int min_num(int *a ,int p) { int i=p-1; while(i>0) { a[i-1]=a[i-1]*a[i]+1; i--; } return a[i]; } main() { int a[5000]={0}; int n,i,m; printf("输入n: \n"); scanf("%d",&n); printf("输入%d个整数,以0结尾: \n",n); scanf("%d",&m); for(i=0;(m! =0)&&(i { a[i]=m; scanf("%d",&m); } sort(a,m); printf("最小数是: %d\n",max_num(a,n)-min_num(a,n)); } 评论人: sam_lin 发布时间: 2011-8-3115: 06: 16 我觉得把这个数列升序排列,先擦去前两个,然后循环擦去新加入的和第一个,如此算出的应该是min;然后降序排列算出来的应该是max。 不知道我这想法是不是对的? 评论人: Eejit 发布时间: 2011-5-2715: 14: 55 表示与sea313081574想的一样,不知道对不对 评论人: xuke 发布时间: 2011-5-2522: 42: 08 #include #include #define maxn 999999999 using namespace std; int ff(int n) { if(n==0) return 1; int sum=0; while(n) { sum++; n=n/10; } return sum; } bool cmp(const int a,const int b) {return a>b; } int main() { int a[2002]; int b[2002]; int n; int temp; int max,min; int i; while(cin>>n,n) { for(i=0 ;i { cin>>a[i]; b[i]=a[i]; } temp=n; while(temp>1) { sort(a,a+n); a[1]=a[0]*a[1]+1; a[0]=maxn; temp--; } max=a[1]; //cout< temp=n; while(temp>1) { sort(b,b+n,cmp); b[1]=b[0]*b[1]+1; b[0]=0; temp--; } min=b[1]; // cout< /////////////// // cout< cout< } return 0; } 评论人: sea313081574 发布时间: 2010-12-3010: 09: 29 如有一组数字 a1 则最大的就是 (((a1*a2+1)*a3+1)*a4+1.........)*an+1 最小的就是 (((an*an-1+1)*an-2+1)*an-3+1.........)*a1 那剩下来就简单了。 评论人: mykeping 发布时间: 2010-5-1722: 39: 43 #include void main() { int max,min,z,i,a[50000],s; scanf("%d",&z); for(i=0;;i++) { scanf("%d",&a[i]); if(a[i]==0) { s=i; break; } } max=a[0]; min=a[1]; for(i=0;i { if(max max=a[i]; if(min>a[i]) min=a[i]; } printf("%d",max-min); } 评论人: mykeping 发布时间: 2010-5-1722: 39: 34 #include void main() { int max,min,z,i,a[50000],s; scanf("%d",&z); for(i=0;;i++) { scanf("%d",&a[i]); if(a[i]==0) { s=i; break; } } max=a[0]; min=a[1]; for(i=0;i { if(max max=a[i]; if(min>a[i]) min=a[i]; } printf("%d",max-min); } 评论人: zhichen 发布时间: 2010-5-1519: 07: 44 #include void main() { int max,min,z,i,a[50000],s; scanf("%d",&z); for(i=0;;i++) { scanf("%d",&a[i]); if(a[i]==0) { s=i; break; } } max=a[0]; min=a[1];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数列 极差 问题