本方法适合于刚开始接触c语言的同学。

问题描述:如图所示八皇后问题实在8x8的国际象棋棋盘上摆放8个皇后,使其不可相互攻击,也就是说任意两个皇后不可以在同一行、同一列、同一斜线上,问:有多少种摆法。

本题思路:通过上述可知每个皇后每一行有且只有一个皇后,所以先将第一个皇后在第一行循环八次,然后在这个循环内添加第二个皇后在第二行循环八次,也就是:

#include <stdio.h>
#include<math.h>
for (int i1 = 1; i1 <= 8 && 1 <= i1; i1++)
{for (int i2 = 1; i2 <= 8 && 1 <= i2; i2++)}

这时就得添加判断条件:这两个皇后如果在在同一行、同一列、同一斜线上,就跳过这个位置直接开始下一个位置 如下:

#include <stdio.h>
#include<math.h>
for (int i1 = 1; i1 <= 8 && 1 <= i1; i1++)
{for (int i2 = 1; i2 <= 8 && 1 <= i2; i2++){if (i1 == i2 || i1 == i2 + 1 || i1 == i2 - 1){continue;}    }
}

后边六个皇后也是如此循环下去,最后在第8个皇后循环内count++(统计共有多少种方法)并打印所有方法。

完整代码如下:

int main()
{int count = 0;for (int i1 = 1; i1 <= 8 && 1 <= i1; i1++){for (int i2 = 1; i2 <= 8 && 1 <= i2; i2++){if (i1 == i2 || i1 == i2 + 1 || i1 == i2 - 1){continue;}for (int i3 = 1; i3 <= 8 && 1 <= i3; i3++){if (i1 == i3 || i1 == i3 + 2 || i1 == i3 - 2 || i2==i3 || i2 == i3 + 1 || i2 == i3 - 1){continue;}for (int i4 = 1; i4 <= 8 && 1 <= i4; i4++){if (i1 == i4 || i1 == i4 + 3 || i1 == i4 - 3 || i2 == i4 || i2 == i4 + 2 || i2 == i4 - 2 || i3 == i4 || i3 == i4 + 1 || i3 == i4 - 1){continue;}for (int i5 = 1; i5 <= 8 && 1 <= i5; i5++){if (i1 == i5 || i1 == i5 + 4 || i1 == i5 - 4 || i2 == i5 || i2 == i5 + 3 || i2 == i5 - 3 || i3 == i5 || i3 == i5 + 2 || i3 == i5 - 2 || i4 == i5 || i4 == i5 + 1 || i4 == i5 - 1){continue;}for (int i6 = 1; i6 <= 8 && 1 <= i6; i6++){if (i1 == i6 || i1 == i6 + 5 || i1 == i6 - 5 || i2 == i6 || i2 == i6 + 4 || i2 == i6 - 4 || i3 == i6 || i3 == i6 + 3 || i3 == i6 - 3 || i4 == i6 || i4 == i6 + 2 || i4 == i6 - 2 || i5 == i6 || i5 == i6 + 1 || i5 == i6 - 1){continue;}for (int i7 = 1; i7 <= 8 && 1 <= i7; i7++){if (i1 == i7 || i1 == i7 + 6 || i1 == i7 - 6 || i2 == i7 || i2 == i7 + 5 || i2 == i7 - 5 || i3 == i7 + 4 || i3 == i7 - 4 || i3 == i7 || i4 == i7 || i4 == i7 + 3 || i4 == i7 - 3 || i5 == i7 || i5 == i7 + 2 || i5 == i7 - 2 || i6 == i7 || i6 == i7 + 1 || i6 == i7 - 1){continue;}for (int i8 = 1; i8 <= 8 && 1 <= i8; i8++){if (i1 == i8 || i1 == i8 + 7 || i1 == i8 - 7 || i2 == i8 || i2 == i8 + 6 || i2 == i8 - 6 || i3 == i8 || i3 == i8 + 5 || i3 == i8 - 5 || i4 == i8 || i4 == i8 + 4 || i4 == i8 - 4 || i5 == i8 || i5 == i8 + 3 || i5 == i8 - 3 || i6 == i8 || i6 == i8 + 2 || i6 == i8 - 2 || i7 == i8 || i7 == i8 + 1 || i7 == i8 - 1){continue;}count++;printf("%d,%d,%d,%d,%d,%d,%d,%d\n",i1,i2,i3,i4,i5,i6,i7,i8);}}}}}}}}printf("%d\n",count);return 0;
}

总结:此方法是适合于刚刚接触c语言的同学 ,可以通过本题熟练运用for循环,加油!代码的数量虽然看着很多但并不繁琐,很好理解,要有耐心哦!

1-C语言 8皇后问题 (For循环解法)相关推荐

  1. C语言循环选择还有,C语言第五讲,语句 顺序循环选择.(示例代码)

    C语言第五讲,语句 顺序循环选择. 一丶语句的简明了解 我们知道,在编写C语言程序的时候,代码是顺序执行的. 从上往下执行. 但是我们可以控制流程的. 在控制之前,我们要先熟悉什么是语句. 相比大家学 ...

  2. 谭浩强c语言第六章兔子数列,谭浩强 C语言 第6章_循环.ppt

    谭浩强 C语言 第6章_循环 第六章 本章要点 循环的基本概念 不同形式的循环控制 多重循环问题 主要内容 6.1 概述 6.2 goto语句以及用goto语句构成循环 6.3 用while语句实现循 ...

  3. C语言中不同类型的循环(Different types of loops in C)

    C语言中有三种类型的循环:for,while,do-while. while循环先判断循环条件. while (condition) {//gets executed after condition ...

  4. 国二C语言文字选择程序选择,全国计算机等级考试二级C语言题型总结(二)——选择循环结构程序设计部分.doc...

    全国计算机等级考试二级C语言题型总结(二)--选择循环结构程序设计部分 C语言第二部分上机题型总结 选择结构部分: if结构题型总结 (案例1) 企业发放的奖金根据利润提成.利润(I)低于或等于10万 ...

  5. 循环数组函数c语言,C语言练习题2(分支结构循环结构数组函数2009-2012二级真题)..doc...

    C语言练习题2(分支结构循环结构数组函数2009-2012二级真题). C语言练习题(二) 一 选择题 1.有以下程序 #include void main() { int a: canf(" ...

  6. C语言第五讲,语句 顺序循环选择.

    C语言第五讲,语句 顺序循环选择. 一丶语句的简明了解 我们知道,在编写C语言程序的时候,代码是顺序执行的. 从上往下执行. 但是我们可以控制流程的. 在控制之前,我们要先熟悉什么是语句. 相比大家学 ...

  7. c语言数组方式实现静态循环队列

    1 循环队列原理图 2 结构体设计 3 运行结果图 4 完整源代码 #include<stdio.h> #include<malloc.h> /*这是一个c语言用数组方式实现循 ...

  8. C语言 do while 和 while 循环 - C语言零基础入门教程

    目录 一.do/while 循环 1.do/while 循环简介 2.do/while 循环实战 二.do/while 循环和 while 循环区别 1.while 循环 2.do/while 循环 ...

  9. c语言第六章条件型循环结构,C语言课件(第六章 循环结构)

    C语言课件 第六章 循环结构 在许多复杂的问题中,常常需要做大量的类似的计算处理,这些类似的相同的处理过程存在重复性过程,即在某种条件成立的情况下需要处理相同的操作时,就要使用循环结构来完成. 类似于 ...

  10. 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt

    <C语言程序设计>分支和循环的C程序设计.ppt 第三章 分支和循环的C程序设计 问题 一元二次方程根求解算法描述 3.1 程序的基本结构 ⒊循环结构Repetition ⒋复合语句 Co ...

最新文章

  1. 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理...
  2. POJ 2240 Arbitrage
  3. 自己写的DBUtil数据库连接工具类
  4. linux7添加两个网关,RHEL7设置IP地址、网关和DNS(示例代码)
  5. quot;《 Serial Drivers 》by Alessandro Rubiniquot; 学习笔记
  6. SQL语句判断指定的数据库、表、字段、存储过程是否存在
  7. 机器人 魂斗罗铁血兵团_《魂斗罗铁血兵团:反叛》XBLA游戏下载
  8. python如何处理spark上的数据_Pyspark获取并处理RDD数据代码实例
  9. 华为Mate 30 Pro再爆猛料:更“大”更高级了
  10. jinja2 中的 Template 批量替换json字符串中的内容
  11. 高并发秒杀系统--Service事务管理与继承测试
  12. Pyhton学习——Day33
  13. Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致
  14. 实习成长:logback收集项目日志,实现日志告警机器人
  15. Android Power Placeholder | 中文教学视频
  16. C语言冒泡排序(通用版)
  17. ❤️「Python」初阶,必看系列, 万字只为你,建议点赞收藏~❤️
  18. 苹果手机几月份最便宜_苹果手机越来越便宜了么?目前看来确实是这样的!
  19. Xmind 2022 Mac版 思维导图软件
  20. 基于HTML和HTML5

热门文章

  1. 【转帖】Photoshop为长腿MM制作拼接效果的照片
  2. R(A+B)<=R(A)+R(B): R(AB)<=min(R(A)+R(B)): A为m×n矩阵,r(A)=n,则AX=0只有零解。设矩阵A为m×n的秩R(A)=m;Ax=b 有解;
  3. 因果关系发现:推开认知世界的大门
  4. 地理地貌3D打印案例
  5. IPA转APP的方法和APP转IPA的方法
  6. 自研芯片,快手打响 ToB 第一战!
  7. @loj - 2478@「九省联考 2018」林克卡特树
  8. 零知识 QAP 问题的转化
  9. 怎样抓CD音轨存为WMA文件
  10. Linux下分区、挂载、删除分区说明