首页 > 代码库 > 三星ADV考试题

三星ADV考试题

有一条轮胎,起始气压未定,每次进行一次加压和一次减压。一共进行的加压和减压次数由测试用例输入,同时每一次的加压数据和减压的数据也由测试用例输入决定。轮胎的气压要保持在0到limit之间,否则轮胎会爆炸。求为了保证轮胎不爆炸轮胎最小的初始气压。

先由一个二维数组存储充放气的数据,同时需要一个数组进行全排列。因为考虑到全排列的时候前后两组充放气可能有数据是一样的,所以不能直接对二维数组进行全排列。需要用一个一维数组进行辅助。

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define SIZE 20
 4 
 5 //int a[5][2]={{50,60},{90,80},{70,30},{40,10},{60,20}};
 6 int a[SIZE][SIZE] = {};//输入数组
 7 int limit = 0;
 8 int max_num = 0;//一共有多少种排列方法
 9 int value=http://www.mamicode.com/0;//目前胎压
10 int init;//初始胎压
11 int min=100;//最小值
12 int max = 0;//最大值
13 int op[SIZE]={0};//数组脚标原始数组
14 int op_out[SIZE]={0};//数组脚标全排列以后的数组
15 int minout;//最小气压输出值
16 int N;//有多少个case
17 
18 bool issafe(int x,int y){//x代表当前行数,y代表当前行的列号
19     bool ret = true;
20     for(int i =0;i<x;i++){
21         if(op[y]==op_out[i])//i代表之前排过的所有元素,y代表正在操作的数
22             ret = false;
23     }
24     return ret;
25 }
26 void handle(){
27     for(int i=0;i<N;i++){
28         value = http://www.mamicode.com/init + a[op_out[N]][0] - a[op_out[N]][1];
29         if(value<min)
30             min = value;
31         if(value>max)
32             max = value;
33     }
34     if(min>=0&&max<=limit){minout=0;}
35     if(min<0){
36         minout = -min;
37         if(minout+max<=limit){
38             minout =min;}
39     }
40 
41 }
42 int sort(int step){
43     if(step == N){
44         handle();
45         max_num++;
46         return 1;
47     }
48     for(int i=0;i<N;i++){
49         if(issafe(step,i)){
50             op_out[step] = op[i];
51             sort(step+1);
52         }
53     }
54 }
55 void main(){
56     printf("Please input the numbers of case:\n");
57     scanf("%d",&N);
58     printf("Please input the numbers of limit:\n");
59     scanf("%d",&limit);
60     printf("Please input the numbers of array:(enter to input)\n");
61     for(int i=0;i<N;i++){
62         for(int j=0;j<2;j++)
63             scanf("%d",&a[i][j]);
64     }
65 
66     for(int i=0;i<N;i++){
67       op[i] = i;
68     }
69     sort(0);//把OP数组进行全排列
70     //printf("%d",max_num);
71     printf("%d\n",minout);//最终输出
72     system("pause");
73 }

注意全排列的用法,刚开始编写代码的时候没有考虑到数据相同的情况。比如有充气数据是一样的就没法进行正确的全排列了。所以需要一个一维数组的辅助。

三星ADV考试题