11.8

建表交换两种思维方法

产生1-10十个乱序数子(用建表法)

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int main(){
  5. srand(time(0));
  6. int i,n,counter[10]={0};
  7. for(i=1;i<=10;i++){
  8. do{
  9. n=rand()%10+1;
  10. }while(counter[n-1]!=0)
  11. printf("%d",n);
  12. counter[n-1]++;
  13. }
  14. return 0;
  15. }

产生1-10十个乱序数子(用交换法)

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int main(){
  5. srand(time(0));
  6. int n,a[10];
  7. for(n=1;n<=10;n++){
  8. a[n-1]=n;
  9. }
  10. for (n=1;n<=10;n++){
  11. int j=rand()%(11-n)+n;
  12. int t=a[n-1];
  13. a[n-1]=a[j-1];
  14. a[j-1]=t;
  15. printf("%d ",a[n-1]);
  16. }
  17. return 0;
  18. }

rand()%(11-n)+n

阵列的排序问题

泡沫排序法

  1. #include<stdio.h>
  2. int main(){
  3. int n,m,a[5];
  4. for(n=1;n<=5;n++){
  5. scanf("%d",&a[n-1]);
  6. }
  7. for(n=1;n<=4;n++){
  8. for(m=1;m<=4;m++){
  9. if(a[m-1]>a[m]){
  10. int t=a[m];
  11. a[m]=a[m-1];
  12. a[m-1]=t;
  13. }
  14. }
  15. }
  16. for(n=1;n<=5;n++){
  17. printf("%d ",a[n-1]);
  18. }
  19. return 0;
  20. }

阵列的阵列

int a[3][2]={{1,2},{3,4},{5,6}}

用此来表示九宫格

  1. #include<stdio.h>
  2. int main(){
  3. int k=1,a[3][3],m,n;
  4. for(n=1;n<=3;n++){
  5. for(m=1;m<=3;m++){
  6. a[n-1][m-1]=k;
  7. k++;
  8. }
  9. }
  10. for(n=1;n<=3;n++){
  11. for(m=1;m<=3;m++){
  12. printf("%d",a[n-1][m-1]);
  13. }
  14. printf("\n");
  15. }
  16. return 0;
  17. }

其实一维更简单,但是二维直观

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int main(){
  5. srand(time(0));
  6. int k=0,a[3][3]={{1,2,3},{4,5,6},{7,8,9}},m,n,i,j;
  7. for(i=0;i<3;i++){
  8. for(j=0;j<3;j++){
  9. int b=rand()%(9-k)+k;
  10. m=b/3;
  11. n=b%3;
  12. int t=a[m][n];
  13. a[i][j]=a[m][n];
  14. a[m][n]=t;
  15. k++;
  16. } //用二维阵列表示乱序九宫格
  17. }
  18. for(i=0;i<3;i++){
  19. for(j=0;j<3;j++){
  20. printf("%d",a[i][j]);
  21. }
  22. printf("\n");
  23. }
  24. return 0;
  25. }

根据对横纵坐标的依赖度来考虑用一维还是二维阵列

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int main(){
  5. srand(time(0));
  6. int a[9]={1,2,3,4,5,6,7,8,9},i;
  7. for(i=0;i<9;i++){
  8. int m=rand()%(9-i)+i;
  9. int t=a[i];
  10. a[i]=a[m];
  11. a[m]=t; //一维阵列乱序九宫格
  12. }
  13. for(i=0;i<9;i++){
  14. printf("%d ",a[i]);
  15. if (i%3==2){
  16. printf("\n");
  17. }
  18. }
  19. return 0;
  20. }