//删除s-t其中的元素 void del_s_t(ElemType s,ElemType t,SqList &L){ int i,j; //判断范围 if(s>=t || L.length==0){ printf("Error!"); } //找到第一个要删除的元素 for(i=0;i<L.length && L.data[i]<s;i++); //判断范围 if(i>=L.length) printf("Error!"); //找到最后一个删除元素的下一个元素 for(j=i;j<L.length && L.data[j]<=t;j++); //循环将相关元素移动 for(;j<L.length;j++,i++){ L.data[i]=L.data[j]; } L.length=i; } //自己的想法 void del_s_t_1(ElemType s,ElemType t,SqList &L){ int i,j,k=0; for(i=0;i<L.length;i++){ if(L.data[i]>=s && L.data[i]<=t){ k++; }else{ for(j=0;j<k;j++){ L.data[j+i-k]=L.data[i+j]; } } } L.length-=k; } //有序表删除相同元素 void del_key(SqList &L){ int i,j; for(i=0,j=1;j<L.length;j++){ if(L.data[i]!=L.data[j]){ L.data[++i]=L.data[j]; } } L.length=i+1; } //合并两个有序顺序表 bool mergeList(SqList &L1,SqList &L2,SqList L){ int i=0,j=0,k=0; if(L1.length+L2.length>L.length) return false; //只要中间有一个顺序表结束就终止循环 while(i<L1.length && j<L2.length){ //L1中元素小于L2元素 if(L1.data[i]<=L2.data[j]){ L.data[k++]=L1.data[i++]; } //L2中元素小于L1 if(L2.data[j]<L1.data[i]){ L.data[k++]=L2.data[j++]; } } //L1中元素剩余 while(i<L1.length){ L.data[k++]= L1.data[i++]; } while(j<L2.length){ L.data[k++]=L2.data[j++]; } L.length=k; } //p17 9 void reverse(ElemType A[],int left,int right,int arraySize){ int mid=(left+right)/2; if(left>right || right>arraySize) return; for(int i=0;i<mid-left;i++){ ElemType temp=A[left+i]; A[left+i]=A[right-i]; A[right-i]=temp; } } void exchange(ElemType A[],int m,int n,int arrraySize){ reverse(A,0,m+n-1,arrraySize); reverse(A,0,n-1,arrraySize); reverse(A,n,m+n-1,arrraySize); } //p17 9 void find_x(SqList &L,ElemType x){ int low=0,high=L.length-1,mid; //折半查找 while(low<=high){ mid=(low+high)/2; if(L.data[mid]==x){ break; }else if(L.data[mid]>x){ high=mid-1; }else{ low=mid+1; } } //直接mid查到 if(L.data[mid]==x && mid<=L.length-1){ int temp=L.data[mid]; L.data[mid]=L.data[mid+1]; L.data[mid+1]=temp; } //查不到 if(low>high){ for(int j=L.length;j>=low;j--){ L.data[j]=L.data[j-1]; } L.data[low]=x; } } //将6-100之间的偶数表示为两个素数之和(哥德巴赫猜想) void mergeNum(){ int i,j,k,a,b,count=0; int num[100]; //表示所有偶数 for(i=8;i<=100;i+=2){ //计算每个偶数的素数 for(j=2;j<i;j++){ for(k=2;k<j;k++){ //不是素数 if(j%k==0){ break; } } //是素数 if(k==j){ num[count++]=j; } } //找该元素的所有素数之和 for(a=0;a<count-1;a++){ for(b=a+1;b<count;b++){ if(num[a]+num[b]==i){ //printf("%d\t",count); printf("%d+%d=%d\t",num[a],num[b],i); } } } printf("\n"); count=0; } }
王道题目日常发布(哥德巴赫猜想,字符串合并)
最新推荐文章于 2022-12-01 18:05:51 发布