一、环行取数
环行取数,逆时针输出数组数据
#includeint main() { int m,n; //数组的行、列 scanf("%d%d",&m,&n); int a[m][n]; int i,j; //用于循环 for(i = 0;i < m;i++) { for(j = 0;j < n;j++) { scanf("%d",&a[i][j]); } } i = -1; j = 0; int sum = m*n; //数组的总数 while(sum) { //逆时针输出 列不变 行+1 while(a[++i][j] != -1 && i < m) //当不重复输出且行不超纲时 继续输出 //不用i++是因为 前一个判断条件和后一个判断条件的i值会不同 { printf("%d ",a[i][j]); a[i][j] = -1; //输出过的数赋值为-1 sum--; //总数-1 } i--; //回到当前行,因为前面的++i,让i大了一个 //无路可走 就向右输出 行不变 列+1 while(a[i][++j] != -1 && j < n) //当不重复输出且列不超纲时 继续输出 { printf("%d ",a[i][j]); a[i][j] = -1; //输出过的数赋值为-1 sum--; //总数-1 } j--; //无路可走 向上输出 列不变 行-1 while(a[--i][j] != -1 && i > -1) //当不重复输出且行不小于0时 继续输出 { printf("%d ",a[i][j]); a[i][j] = -1; //输出过的数赋值为-1 sum--; //总数-1 } i++; //无路可走 向左输出 行不变 列-1 while(a[i][--j] != -1 && j > -1) //当不重复输出且列不小于0时 继续输出 { printf("%d ",a[i][j]); a[i][j] = -1; //输出过的数赋值为-1 sum--; //总数-1 } j++; } return 0; }
二、数组查找及替换
数组查找及替换 元素个数不超过100 b的值在1-100之间
#includevoid paixu(int a[],int n) { int h,i,j,k; for(i = 1;i < n;i++) //从第2个数开始 { int min = a[i]; //赋a[i]的值给min for(j = i-1;j >= 0;j--) { if(min < a[j]) //如果min的值小于a[j]的值,a[j]后的值往后挪1. { a[j+1] = a[j]; a[j] = min; } } } printf("排序后结果是:n"); for(k = 0;k < n;k++) { printf("%d ",a[k]); } printf("n"); } int main() { int n,b; //元素个数 整除的数 scanf("%d%d",&n,&b); int a[n],c[n]; int i,j = 0; //数组元素 for(i = 0;i < n;i++) { scanf("%d",&a[i]); if(a[i]%b != 0) { c[j++] = a[i]; } } paixu(c,j); for(i = 0;i < j;i++) { if(c[i]>=65 && c[i]<=90) //看是否在A-Z之间 { printf("%c ",c[i]); } else { printf("%d ",c[i]); } } return 0; }
三、字符删除
#include#include int main() { char str[20]; char str2[20]; char ch; int i,j; fgets(str,20,stdin); scanf("%c",&ch); //int lenth = strlen(str); for(i = 0;str[i]!=' ';i++) { if(str[i] != ch) { str2[j++] = str[i]; } } str2[j] = ' '; printf("%s",str2); return 0; }
四、哈夫曼树
求哈夫曼树的总费用
#include#define MAX 1000 int main() { int n; //输入的个数 小于100 scanf("%d",&n); int p[n]; int i; //用于循环 int mini,minj,flag,sum; for(i = 0;i < n;i++) { scanf("%d",&p[i]); } mini = minj = MAX; while(1) { for(i = 0;i < n;i++) //先找出第一个最小值 { if(p[i]< mini) { mini = p[i]; flag = i; } } p[flag] = MAX; //mini保存后将第一个最小值赋值为MAX,避免影响第二个最小值 for(i = 0;i < n;i++) //找第二个最小值 { if(p[i]< minj) { minj = p[i]; flag = i; } } p[flag] += mini; //和又进入下一次的费用 if(minj == MAX) { break; } else { sum = mini + minj; mini = minj = MAX; } } printf("%d",sum); return 0; }



