快捷搜索:

C 练习实例1

为了尽量减少不必要的循环,做了如下的小优化。

#include <stdio.h> #include <stdint.h> int main() { uint32_t i; // 百位 uint32_t j; // 十位 uint32_t k; // 个位 for (i=1; i<5; i++) { for (j=1; j<5; j++) { // 百位与十位重复 // 跳过当前十位 if (j==i) { continue; } for (k=1; k<5; k++) { // 个位与百位或十位重复 // 跳过当前个位 if (k==j || k==i) { continue; } printf("%u,%u,%u\n", i, j, k); } } } }

DCGDDD

805***426@qq.com

2年前 (2017-08-13)

#2

HIT_CCC

117***2963@qq.com

参考方法:

#include<stdio.h> int main(void) { int i,j,k; for(i = 1;i < 5;i++) { for(j = 1;j < 5;j++) { if(i == j) continue; for(k = 1;k < 5;k++) { if(i == k || j == k) continue; printf("%d,%d,%d\n",i,j,k); } } } return 0; }

HIT_CCC

117***2963@qq.com

4个月前 (02-02)

#1

隔壁小宋

176***91767@163.com

深搜法(DFS)写此题:

#include <stdio.h> #include <stdlib.h> int b[4],arr[4];//定义两个数组用来类比 int Count=0;//计数器 void DFS(int step){     if(step==5){         if(arr[1]!=arr[2]&& arr[1]!=arr[3]&&arr[2]!=arr[3]){//判断哪些符合条件             Count++;             printf("%d%d%d\n",arr[1],arr[2],arr[3]);//输出可用排列         }         return ;     }     for(int i=1;i<=4;i++){         if(b[i]==0){             arr[step]=i;             b[i]=1;//排除重复             DFS(step+1);//自己调用自己             b[i]=0;         }     }     return ; } int main(void) { DFS(1); printf("共有%d种",Count); return 0; }

隔壁小宋

您可能还会对下面的文章感兴趣: