我想要一种超能力。徒写千行无BUG=。不需要吃药 ==。

 
==//学识有限,此答案纯属娱乐==。=请各位读者慎重把玩、、博主邮箱qfnuxx@126.com
# include <stdio.h>

int main(){

	int bottle,Ntime,q,p,i=0,j=0,k=0,sum=0,min,max,red,test;
	int Schange=0;//统计消除阻碍花费的能量
	int flag;
		int zu[50]={0};//使瓶子号从1开始
			int backup[50]={0};
				int back[50]={0};
	int change[51]={0};
	int solu[50]={0};
	scanf("%d",&bottle);
	while(i<bottle){
	scanf("%d",&zu[i]);
//	printf("%dshi%d\n",i,zu[i]);
	i++;
	}
	i=0;
		while(i<bottle){
	backup[i]=zu[i];
//	printf("%dshi%d\n",i,zu[i]);
	i++;
	}
	i=0;//备份
		while(i<bottle){
	back[i]=zu[i];
//	printf("%dshi%d\n",i,zu[i]);
	i++;
	}
	i=0;//
		while(i<bottle){
	scanf("%d",&change[i]);
//	printf("%dshi%d\n",i,zu[i]);
	i++;
	}
		i=0;
    scanf("%d",&Ntime);
	    printf("numberOFbottles是%d\n",bottle);
		printf("总剂是%d\n",Ntime);
		
	while(i<Ntime){
	//排序
			printf("第%d剂过程\n",i);
		//	&&j<bottle;
			//输入:通过管道命令,将一个包含若干测试用例的文件作为【标准输入流】所以需要来判断测试文件是否读完。
//输出:通过管道命令,将【标准输出流】,输出到一个文件中。
			//将程序的【输出文件】与【正确答案文件】进行比对:如果一样,则返回程序正确提示;否则返回程序错误的提示。

		while((scanf("%d",&test))!=EOF){	solu[j]=test;
	//	printf("j是%d\n",j);
		j++;}
		//配方共j瓶
		//排序开始
		for(p=0;p<j;p++){
			max=p;//初始化
			// flag=false;
	    //bake[p]=sole[q];//选择比较法,由大到小记录瓶号
		   for(q=p+1;q<j;q++){
			if(zu[(solu[q])-1]>zu[(solu[max])-1]){//瓶子号做为下标不能在用backup
				max=q;}
		}
		  // k=backup[(solu[p])-1];
              //  backup[(solu[p])-1]=backup[(solu[max])-1];
			//	backup[(solu[max])-1]=k;
		//		printf("backup'第%d个是%d\n",solu[p],backup[(solu[p])-1]);
		        k=solu[p];
				solu[p]=solu[max];
				solu[max]=k;//交换了配方里的瓶子号、原change的下标
		
//博主邮箱qfnuxx@126.com	
} //排序完毕  
		//检验输出瓶子号,由大到小
     printf("按阻力值由大到小对瓶子排序\n");
		p=0;
	while(p<j){
	printf("s%d为%d号,",p+1,solu[p]);
    printf("阻力值是%d\n",zu[(solu[p])-1]);
	p++;
	}
		/*	backup[(solu[q-1])]=backup[(solu[q])];
				backup[(solu[q])]=k;
				flag=true;}}
		if(flag==flase){break;}
		}//
		for(p=0;p<j;p++)
        flag=false;
		for(q=j-1;q>p;q--){
			if(backup[(solu[q-1])]<backup[(solu[q])]){
				k=backup[(solu[q-1])];
                backup[(solu[q-1])]=backup[(solu[q])];
				backup[(solu[q])]=k;
				flag=true;}}
		if(flag==flase){break;}
		}*/
      //  printf("该次min:%d\n",min);
	//	printf("假排序后的免疫伤害\n");
	/*		p=0;
	//	while(p<j){
	//	printf("%d号=%d,",solu[p],change[(solu[p])-1]);
	   // printf("zu是%d\n",zu[(solu[p])-1]);
		p++;
		}
		*/
	    min=zu[(solu[0])-1];
		 Schange=0;//chushihua
    	for(p=1;p<j;p++){
            //	 printf("change%d:%d\n",solu[p-1],change[(solu[p-1])-1]);
			Schange=Schange+change[(solu[p-1])-1];
			// printf("min:%d,backup[(solu[p])-1]:%d\n",min,backup[(solu[p])-1]);
			if((zu[(solu[p])-1]+Schange)<=min){
			min=zu[(solu[p])-1]+Schange;
            printf("第%d瓶前的记录需要变动,此次min:%d\n",p+1,min);
			red=p;//存住位置
			}
		}
		sum=sum+min;//每一次的最小值
		printf("sum:%d,p:%d\n",sum,red);
			printf("更新原始的zuli记录\n");
			for(q=0;q<red;q++){
            
			zu[(solu[q])-1]=0;//永久变0
		}
			p=0;
				while(p<bottle){//ceshi
	            printf("%d ,",zu[p]);
   
			    p++;
				}
				printf("\n");
			j=0;
        i++;
	
}





printf("%d",sum);
	return 0;
}


//上图

--优化后


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值