练习20

 
  1. /*******************************************************************************
  2. 20. (N皇后) 在国际象棋的棋盘上放置N个皇后,使其不能互相攻击,即任意
  3.  两个皇后不能处在棋盘的同一行,同一列,同一斜线上,试问共有多少种摆法?
  4.   利用回溯法求解N皇后问题
  5. ********************************************************************************/
  6. #include <stdio.h>
  7. #include <math.h>
  8. #include <malloc.h>
  9. static int counter = 0;
  10. //检查是否是合法解
  11. int check(int k,int* v)
  12. {
  13.     int i;
  14.     for(i=0;i<k;i++)
  15.     {
  16.         if(v[i]==v[k])
  17.             return 0;
  18.         if(abs(k-i)==abs(v[k]-v[i]))
  19.             return 0;
  20.     }
  21.     return 1;
  22. }
  23. //输出一个解
  24. void output(int *v, int n)
  25. {
  26.     int i,j;
  27.     for(i=0;i<n;i++)
  28.     {
  29.         for(j=0;j<n;j++)
  30.         {
  31.             if(j+1==v[i])
  32.             {
  33.                 printf("%2c",'O');
  34.             }
  35.             else
  36.             {
  37.                 printf("%2c",'#');
  38.             }
  39.         }
  40.         printf("/n");
  41.     }
  42.     printf("/n");
  43. }
  44. //回溯算法
  45. int N_Queen(int* v,int n)
  46. {
  47.     int i;
  48.     int flag=0;
  49.     int k=0;
  50.     for(i=0;i<n;i++)
  51.         v[i]=0;
  52.     
  53.     while(k>=0)
  54.     {
  55.         while(v[k]<n)
  56.         {
  57.             v[k]++;
  58.             if(check(k,v))
  59.             {
  60.                 if(k<n-1)
  61.                 {
  62.                     k++;
  63.                 }
  64.                 else if(k==n-1)
  65.                 {
  66.                     flag=1;
  67.                     output(v,n);
  68.                     counter ++;
  69.                     v[k]=0;
  70.                     k=k-1;
  71.                 }
  72.             }
  73.         }
  74.         v[k]=0;
  75.         k=k-1;
  76.     }
  77.     return flag;
  78. }
  79. //main
  80. void main()
  81. {
  82.     int n;
  83.     int *v;
  84.     printf("请输入N皇后问题参数N: ");
  85.     scanf("%d",&n);
  86.     if(n<2)
  87.     {
  88.         printf("参数N不符合!/n");
  89.         return;
  90.     }
  91.     v=(int*)malloc(n*sizeof(int));
  92.     if(!N_Queen(v,n))
  93.     {
  94.         printf("no solve!/n");
  95.     }
  96.     printf("一共有%d种摆法!/n",counter);
  97.     free(v);
  98. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是 20 道 Python 中的 for 循环练习题: 1. 打印出 1 到 10 的数字 ```python for i in range(1, 11): print(i) ``` 2. 打印出 1 到 10 的偶数 ```python for i in range(2, 11, 2): print(i) ``` 3. 打印出一个字符串中的每一个字符 ```python string = "Hello, world!" for char in string: print(char) ``` 4. 打印出一个列表中的每一个元素 ```python list = [1, 2, 3, 4, 5] for element in list: print(element) ``` 5. 打印出一个字典中的每一个键值对 ```python dict = {'a': 1, 'b': 2, 'c': 3} for key, value in dict.items(): print(key, value) ``` 6. 计算 1 到 10 的和 ```python sum = 0 for i in range(1, 11): sum += i print(sum) ``` 7. 计算 1 到 10 的奇数之和 ```python sum = 0 for i in range(1, 11, 2): sum += i print(sum) ``` 8. 计算 1 到 10 的偶数之和 ```python sum = 0 for i in range(2, 11, 2): sum += i print(sum) ``` 9. 打印出一个列表中的所有偶数 ```python list = [1, 2, 3, 4, 5] for element in list: if element % 2 == 0: print(element) ``` 10. 打印出一个列表中的所有奇数 ```python list = [1, 2, 3, 4, 5] for element in list: if element % 2 != 0: print(element) ``` 11. 打印出一个列表中的所有大于 3 的元素 ```python list = [1, 2, 3, 4, 5] for element in list: if element > 3: print(element) ``` 12. 打印出一个列表中的所有小于等于 3 的元素 ```python list = [1, 2, 3, 4, 5] for element in list: if element <= 3: print(element) ``` 13. 打印出一个列表中的所有正数 ```python list = [1, -2, 3, -4, 5] for element in list: if element > 0: print(element) ``` 14. 打印出一个列表中的所有负数 ```python list = [1, -2, 3, -4, 5] for element in list: if element < 0: print(element) ``` 15. 打印出一个列表中的所有大于等于 0 的元素 ```python list = [1, -2, 3, -4, 5] for element in list: if element >= 0: print(element) ``` 16. 打印出一个列表中的所有小于 0 的元素 ```python list = [1, -2, 3, -4, 5] for element in list: if element < 0: print(element) ``` 17. 打印出一个列表中的所有正偶数 ```python list = [1, 2, 3, 4, 5] for element in list: if element > 0 and element % 2 == 0: print(element) ``` 18. 打印出一个列表中的所有负奇数 ```python list = [1, -2, 3, -4, 5] for element in list: if element < 0 and element % 2 != 0: print(element) ``` 19. 打印出一个字符串中的所有元音字母 ```python string = "Hello, world!" vowels = "aeiouAEIOU" for char in string: if char in vowels: print(char) ``` 20. 打印出一个字符串中的所有辅音字母 ```python string = "Hello, world!" vowels = "aeiouAEIOU" for char in string: if char.isalpha() and char not in vowels: print(char) ``` 希望这些练习题能够帮助你练习 Python 中的 for 循环语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值