user-0 提问: 那位帮我看看

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  //* int KeepSingle(int array[], int n) {    int i;     for (i = 1; i < n; ++i)    {       if (array[i-1] == array[i])       {          for (; i < n; ++i)             array[i-1] = array[i];                 --n;          i = 1;       }    }     return n; }  int cmp(const void *a , const void *b) {    //return *(int *)a - *(int *)b; // 会有溢出隐患    return *(int *)a > *(int *)b; }  int main(void) {    int num[100];    int n, i = 0;    scanf("%d", &n);    while (i < n)    {       scanf("%d", &num[i]);       i++;    }         qsort(num, n, sizeof(num[0]), cmp);     for (i = 0; i < n; i++)       printf("%d\t", num[i]);    puts("");     n = KeepSingle(num, n);     for (i = 0; i < n; i++)       printf("%d\t", num[i]);       puts("");        return 0; }

user: user-2
content: #include<stdio.h>  static void print(const int *arr, int size); void bubble_sort(int *arr, int size); void del_repeat(int *arr, int *psize);   int main() { #if 1      int num_list[20], n, cur_cnt;     int i;      while (scanf("%d", &n) == 1 && (n < 10 || n > 20))         ;      i = 0;     while (i < n)         scanf("%d", &num_list[i++]);      print(num_list, n);      bubble_sort(num_list, n);     print(num_list, n);     cur_cnt = n;     del_repeat(num_list, &cur_cnt);      print(num_list, cur_cnt);  #else     int sum[100];     int n,j,t,i=0;     scanf("%d",&n);     while(i<n)     {         scanf("%d",&sum[i]);         i++;     }     for(i=0;i<n;i++)     {         for(j=i+1;j<n-1;j++)         {             if(sum[i]==sum[j])                 sum[i]=sum[j];             else if(sum[i]>sum[j])                 t=sum[i];             sum[i]=sum[j];             sum[j]=t;         }     }     for(i=0;i<n;i++)         printf("%d\t",sum[i]); #endif     return 0; }  static void print(const int *arr, int size) {     int i;      for (i = 0; i < size; i++)         printf("%d  ", arr[i]);     putchar(10); }  void del_repeat(int *arr, int *psize) {     int i, j;      for (i = 0; i < *psize - 1;)         if (arr[i] == arr[i+1]) {             for (j = i+1; j < *psize-1; j++)                 arr[j] = arr[j+1];             (*psize)--;         } else {             i++;         } }   void bubble_sort(int *arr, int size) {     int i, j;      for (i = 0; i < size; i++)         for (j = 0; j < size - i - 1; j++)             if (arr[j] > arr[j+1]) {                 int tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } } 参考一下吧

user: user-3
content: 设置断点，F10，F11单步调试看看每个变量的变化就知道你的问题了，if，elseif后面代码有多行时要括起来，变量初始化。

user: user-3
content: #include<stdio.h> int main() {     int sum[100],a[100];     int n=0,j=0,t=0,i=0,h=0; 	int m=0;//记录相同数据个数 	scanf("%d",&n); 	while(i<n) 	{ 		scanf("%d",&sum[i]); 		i++; 	}	 	for(i=0;i<n;i++) 	{ 		for(j=i+1;j<n;j++) 		{ 			if(sum[i]>sum[j]) 			{ 				t=sum[i]; 			sum[i]=sum[j]; 			sum[j]=t; 			} 		} 	} 	 	    for(i=0;i<n;)   { 	     			a[h]=sum[i]; 			if (sum[i]==sum[i+1]) 			{  			i=i+2; 			m++,h++; 			} 			else 			i++,h++;   }  			 		 		 	 	for(i=0;i<n-m;i++) 		printf("%d\t",a[i]); 	return 0; } 写得有点冗长，不过调试了一下应该没问题

user: user-4
content: 修改为：  		for (j = i + 1; j < n; ) 		{ 			if (sum[i] == sum[j]) { 				t = sum[n-1]; 				sum[n - 1] = sum[j]; 				sum[j] = t; 				n--; 				continue; 			}  			if (sum[i] > sum[j]) { 				t = sum[i]; 				sum[i] = sum[j]; 				sum[j] = t; 			}  			j++; 		}

user: user-4
content: 引用 2 楼 hefashion0190 的回复:t未初始化，else if判断为false时，t为不可知数值， 建议所有的变量都初始化 理解题意，设计算法 学会调试非常重要   仅供参考 #include<stdio.h> int main() { 	int sum[100] = {0}; 	int n = 0, j = 0, t = 0, i = 0; 	scanf("%d", &n); 	while (i < n) { 		scanf("%d", &sum[i]); 		i++; 	} 	for (i = 0; i < n; i++)	{ 		for (j = i + 1; j < n; j++) { 			if (sum[i] == sum[j]) { 				t = sum[n-1]; 				sum[n - 1] = sum[j]; 				sum[j] = t; 				n--; 			}  			if (sum[i] > sum[j]) { 				t = sum[i]; 				sum[i] = sum[j]; 				sum[j] = t; 			} 		} 	} 	for (i = 0; i < n; i++) 		printf("%d\t", sum[i]); 	return 0; } 算法还是有问题 输入 10 输入 3 3 3 3 3 3 3 3 3 3  剩下怎么解决你自己看了！

user: user-4
content: t未初始化，else if判断为false时，t为不可知数值， 建议所有的变量都初始化 理解题意，设计算法 学会调试非常重要   仅供参考 #include<stdio.h> int main() { 	int sum[100] = {0}; 	int n = 0, j = 0, t = 0, i = 0; 	scanf("%d", &n); 	while (i < n) { 		scanf("%d", &sum[i]); 		i++; 	} 	for (i = 0; i < n; i++)	{ 		for (j = i + 1; j < n; j++) { 			if (sum[i] == sum[j]) { 				t = sum[n-1]; 				sum[n - 1] = sum[j]; 				sum[j] = t; 				n--; 			}  			if (sum[i] > sum[j]) { 				t = sum[i]; 				sum[i] = sum[j]; 				sum[j] = t; 			} 		} 	} 	for (i = 0; i < n; i++) 		printf("%d\t", sum[i]); 	return 0; }

user: user-2
content: void del_repeat2(int *arr, int *psize) {     int *pdst, *pend;      pdst = arr;     pend = arr + *psize - 1;  #if 0     for (; arr < pend; arr++) {         if (*pdst != *(arr + 1))             *(++pdst) = *(arr + 1);          else             (*psize)--;     } #else     while (arr < pend) {         if (*pdst != *(arr + 1))             *(++pdst) = *(arr + 1);         else             (*psize)--;         arr++;     }   #endif } 指针形式，单层循环，提高运行效率；

user: user-5
content: 如果遇到相同的数据、最后输出的个数就不是n个了