解答:可以用顺序存储结构。然后需要排序,之后判断是否为质数。
所以对C而言算法由三部分组成:顺序线性表的建立,排序算法的实现,判断是否为质数。
化简之后将建立顺序表放在main里,所以只要排序算法和判断是否为质数即可。
具体代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define true 1 5 #define false 0 6 #define MAXSIZE 10000 7 8 typedef int status; 9 typedef struct { 10 int key; 11 }Redtype; 12 typedef struct { 13 Redtype r[ MAXSIZE]; 14 int length; 15 }*SqList,LNode; 16 17 void SelectSort(SqList L ){ 18 int j, l; 19 Redtype temp; 20 for ( int i = 0; i < L->length; i++){ 21 l = i ; 22 for (j = i + 1; j < L->length; j++){ 23 if ( L->r[j].key < L->r[l].key) 24 l = j; 25 } 26 if (i != l){ 27 temp = L->r[i]; 28 L->r[i] = L->r[l]; 29 L->r[l] = temp; 30 } 31 } 32 } 33 34 status isPrimeNum(int x ){ 35 if ( x < 2) 36 return false; 37 else if ( x == 2) 38 return true; 39 else{ 40 for ( int i = 2; i < x; i++){ 41 if ( x%i == 0) 42 return false; 43 } 44 return true; 45 } 46 } 47 48 int main(){ 49 SqList L; 50 L = ( LNode*)malloc( sizeof ( LNode)); 51 int n,k,i,m; 52 scanf( "%d %d", &n,&k); 53 if (n > MAXSIZE || k > n) 54 exit(0); 55 L->length = n; 56 for (i = 0; i < n; i++){ 57 scanf( "%d", &L->r[i].key); 58 if (L->r[i].key < 0) 59 break; 60 } 61 SelectSort(L); 62 m = L->r[n - k].key - L->r[k - 1].key; 63 if (isPrimeNum(m)) 64 printf( "YES %d ", m); 65 else 66 printf( "NO %d ", m); 67 return 0; 68 }
由本题目得到的领悟:1、C语言没有引用和bool类型。
2、在CSDN上提问还是比较有效率的,所以要学会提问和思考。
3、英语是硬伤,已经提示出错,然而却不懂的看,悲哀。