安为
小Q最近在玩一个嵌入式开发板,看着板子上的一堆电容,他想比较板子上电容数量的多少。第一行给定比较次数n,接下来n行,每行给定两个板子的编号a1,a2,编号从1开始。每行第一个元素a1为第一次比较中板子上电容数量较多的 板子编号,第二个元素a2为板子上电容数量较少的板子编号。最后一行为要比较的两块板子的编号a,b.请返回这两块板子上电容数量大小的关系,若a更多返回1,b更多返回-1,无法判断返回0。输入数据保证合法,不会有矛盾的情况出现。
记录比较次数
while记录每组数据存到数组j
把所有数据不重复的保存到k数组中
遍历数组k,取出每个数据,从j中查找,根据记录调换位置。(类四冒泡排序)
比较最后一行中两个数据在排好序的数组中的顺序。
样例输入如下:
4 //比较次数
1 2
2 4
1 3
4 3
2 3
样例输出:
1
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 /* 7 n:给定的比较次数 8 a/b:最后一行要比较的板子上电容的编号 9 arrayj:输入的每组数据 10 arrayk:所有不重复的数据 11 klen:arrayk的长度 12 */ 13 int n,a,b,klen=0; 14 int arrayj[100][2]; 15 int arrayk[100]; 16 scanf("%d",&n); 17 for(int i=0;i<n;i++) 18 { 19 scanf("%d",&arrayj[i][0]); 20 scanf("%d",&arrayj[i][1]); 21 } 22 scanf("%d",&a); 23 scanf("%d",&b); 24 25 for(int i=0;i<n;i++) 26 { 27 //status:状态位,判断arrayk[]中是否有arrayj[][],1表示不存在,0表示存在 28 int status=1; 29 for(int j=0;j<klen;j++) 30 { 31 if(arrayk[j]==arrayj[i][0]) 32 { 33 status=0;break; 34 } 35 } 36 if(status==1) arrayk[klen++]=arrayj[i][0]; 37 status=1; 38 for(int j=0;j<klen;j++) 39 { 40 if(arrayk[j]==arrayj[i][1]) 41 { 42 status=0;break; 43 } 44 } 45 if(status==1) arrayk[klen++]=arrayj[i][1]; 46 } 47 for(int i=0;i<n;i++) 48 { 49 /* 50 按照arrayj中比较的两个编号的电容数量,为arrayk数组排序 51 temp0/temp1为给出的两个编号在数组中的下标,EG: 52 temp0 temp1 53 (1 2) 54 (2 4) 55 */ 56 int temp0=0,temp1=0; 57 for(int j=0;j<klen;j++) 58 { 59 if(arrayk[j]==arrayj[i][0]) 60 temp0=j; 61 if(arrayk[j]==arrayj[i][1]) 62 temp1=j; 63 } 64 if(temp0>temp1) 65 { 66 //将大的移到前面 67 int tmp=arrayk[temp0]; 68 for(int k=temp0;k>0;k--) 69 { 70 arrayk[k]=arrayk[k-1]; 71 } 72 arrayk[temp1]=tmp; 73 } 74 75 // for(int z=0;z<n;z++) 76 // printf("%d ",arrayk[z]); 77 // printf("\n"); 78 } 79 int temp0=0,temp1=0; 80 for(int j=0;j<klen;j++) 81 { 82 if(arrayk[j]==a) 83 temp0=j; 84 if(arrayk[j]==b) 85 temp1=j; 86 } 87 if(temp0<temp1) 88 printf("1\n"); 89 else if(temp0>temp1) 90 printf("-1\n"); 91 else 92 printf("0\n"); 93 94 return 0; 95 }