1
/*有m位数,要求删除n位,使得删除后的数最小
例如:576397987456677811111111111,删除576998使得删除后的数最小*/
原创代码:
#include <iostream> //#include <cstdio>//可以用来编写C using namespace std; void Read (char a[]) { char c; int i=0; int x; cout<<"请输入这些数:"<<endl; c=getchar();//该部分是用来使用字符串输入数据的 while(c!='\n') { a[i]=c; i++; c=getchar(); } x=i; cout<<"共有"<<x<<"个数"<<endl; cout<<"删除前的序列为:"<<endl; for(i=0;i<x;i++) cout<<a[i]; cout<<endl; } void Detele(char a[],int x,int j) { int k=1,n,w=0; for(int i=0;i<x&&k<x&&w<j;) { if(a[i]>a[k]) { a[i]=-1; w++; } for(n=0;n<k;n++)//该部分指当每次考虑下一个数时遍历一遍数据查看是否有前面的数据大于改数 if(a[n]>a[k]) { a[n]=-1; w++; } k++; } if(k==x)//该部分是指如果数列是按照顺序排序的话,则应该从后开始删除 for(int q=1,i=x-1;a[i]!=-1&&q<=(j-w);) { a[i]=-1; i--; q++; } cout<<"删除后的最小序列是:"<<endl; for(int i=0;i<x;i++) if(a[i]!=-1) cout<<a[i]; } int main() { int m=10,n; char a[100]={'0'}; Read(a); cout<<"请输入要删除数的个数:"<<endl; cin>>n; Detele(a,m,n); return 0; }
参考:
2./*有一魔法师在森林中,森林中有n瓶药水,每个药水都有一定的浓度,只有药水浓度p不大于所给的参考浓度时,药水才有效,每瓶药水#include<stdio.h> void main() { char a[1000]; int i,j,k,n; int l; scanf("%s",a); l=0; i=0; while(a[i++]!='\0') l++;//长度 scanf("%d",&n); while(n--) { for(i=0;i<l;i=j) { while(a[i]=='*') i++;//第一个(没有删没有)数的位置 j=i+1; while(j<l&&a[j]=='*') j++;//第二个数的位置 if(j==l) {//这个地方可以优化自行把握 k=j-1; while(a[k]=='*') k--; a[k]='*'; break; } else if(a[i]>a[j]) { a[i]='*'; break; } } } printf("\n"); for(i=0;i<l;i++) if(a[i]!='*') printf("%c",a[i]); printf("\n"); }
必须用完,配药水,问最大体积是多少*/
*参考数据:
输入3//三组数据 输出:
1 100 10//1为一瓶浓度 100为体积 10为参考浓度 0
100//所给的一瓶药水的浓度
2 100 24 100
20 30
3 100 24 300
20 30 30 */
#include <iostream> using namespace std; #define M 10 void sort(int a[],int n) { int k,i; for(i=1;i<=n;i++) for(int j=i+1;j<=n;j++) if(a[j]<a[i]&&a[j]!=0) { k=a[i]; a[i]=a[j]; a[j]=k; } for(i=1;i<=n&&a[i]!=0;i++) cout<<a[i]<<endl; } void Made( int a[]) { int N ;//有N组数据 int i,k=0,sum,n,v ,w;//n瓶药水,v每瓶药水的体积,w参考浓度 //int a[M];//n瓶药水的浓度 cout<<"请输入有几组数据:"<<endl; cin>>N; for(i=1;i<N;i++) { sum=0; cout<<"请分别输入所给的药水瓶数每瓶药水的体积 参考浓度:"<<endl; cin>>n; cin>>v; cin>>w; cout<<"请输入所给的药水各自的浓度:"<<endl; for(i=1;i<=n;i++) cin>>a[i]; sort(a,n); for(i=1;i<=n;i++) if(a[i]<w) { sum+=a[i]; k=i; } for(i=k;i<=n;i++) { sum+=a[i+1]; k++; if(sum/k>w) { cout<<"最大体积为:"<<endl; cout<<(k-1)*v<<endl; break; } if(k==n) { cout<<"最大体积为:"<<endl; cout<<k*v<<endl; } } } } int main() { int a[M]={0}; Made(a); return 0; }