【数据结构】寻找规律:算对角线长度||杨辉三角||魔方问题(C语言实现)
创作时间:
作者:
@小白创作中心
【数据结构】寻找规律:算对角线长度||杨辉三角||魔方问题(C语言实现)
引用
CSDN
1.
https://blog.csdn.net/zjoy_/article/details/145541156
本文将介绍三个经典的算法问题:求矩阵对角线元素之和、杨辉三角的构造以及幻方问题的解决方法。这些问题都通过寻找规律来找出构造逻辑,并用循环来实现。
三个算法
1. 求矩阵对角线元素之和(C语言)
- 初始化行循环变量i和列循环遍历j,求和变量sum,初始化全部的元素为0
- 用书输入9个数
- 执行换行之后
关键点: - 对角线的元素的【i】和【j】是相等的[左上到右下]
- 右上到坐下的坐标,相加为2,那么i+j=2——>i=2-j
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
// 初始化变量值;
int i = 0;
int j = 0;
int sum = 0;
int a[3][3] = { 0 };
// 获取数组a的值;
printf("请输入9个整数!!!!\n");
// 循环;
for (i = 0; i < 3; i++)
{
// 列;
for (j = 0; j < 3; j++)
{
// 提示用户;
printf("a[%d][%d]=", i, j);
// 获取用户输入的数据;
scanf("%d", &a[i][j]);
}
}
// 换行;
printf("\n");
// 提示用户;
printf("您输入的矩阵为:\n");
// 打印数组;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
// 打印;
printf("%5d", a[i][j]);
}
// 换行;
printf("\n");
}
// 换行;
printf("\n");
// 运算;
for (i = 0; i < 3; i++)
{
// 运算;
sum += a[i][i];
sum += a[i][2-i];
}
// 输出结果;
printf("对角线之和为:%d", sum);
return 0;
}
2. 杨辉三角
问题描述:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
用算法构造出来这样的三角形
规律:
- 第一列全为1,最后一列全为1
- a[i][0]=1
- for循环把最后一列变成1:a[i][i]=1
- 其他元素遵循,这一行的数是上一行两数和:a[i][j]=a[i-1][j-1]+a[i-1][j]
#include <stdio.h>
void main(){
int a[10][10],i,j;
// 第1列元素值为1
for(i=0;i<10;i++)
a[i][0]=1;
// 对角线元素值为1
for(i=0;i<10;i++)
a[i][i]=1;
// 其它元素
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
// 输出杨辉三角
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%8d",a[i][j]);
printf("\n");
}
}
3. 幻方问题
问题描述:幻方又称魔方阵,游戏规则是在一个n*n的矩阵中填入1到n2的数字,使得每一行、每一列、每条对角线的累加和都相等。如图所示是一个3阶幻方,每一行、每一列每条对角线的累加和都等于15。
规律:
- 1放在第一行中间开始填数,2在左边一行,2的下一个数字,在右边
- 左上角超出上边界,则在最下边对应的位置填入下一个数
- 左上角超出左边界,则在最右边对应的位置填入下一个数
int arr[100][100]={0}; // 假设最多为100行、100列
printf("请输入1-100内的奇数:\n"); // 只处理为奇数的方阵
int num;
scanf("%d",&num);
int i,j;
i=0;j=num/2;
arr[i][j]=1; // 将第一个值存入中间位置
int iTemp,jTemp; // 用于暂存当前位置
for(int k=2;k<=num*num;k++){
iTemp=i;
jTemp=j;
if(--i<0){ // 判断当前位置是否超出上边界
i=num-1;
}
if(--j<0){ // 判断当前位置是否超出左边界
j=num-1;
}
if(arr[i][j]>0){ // 如果该位置已经有数,则在该位置下面添加数字
i=iTemp+1;
if(i==num){
i=0;
}
j=jTemp;;
}
arr[i][j]=k;
}
for(int m=0;m<num;m++){
for(int n=0;n<num;n++){
printf("%d\t",arr[m][n]);
}
printf("\n");
}
总结:都是通过寻找规律来找出构造逻辑然后用循环来实现
本文原文来自CSDN
热门推荐
从东坡肉到东坡豆腐:十道名菜里的苏东坡
五十岁生日祝福语,让你秒变情感达人
福如东海,寿比南山:五十岁生日的祝福与期许
家长会变身亲子沟通神器?这些技巧让你事半功倍
教你4种剥蒜方法,40秒剥一头蒜,手不痛不黏,家庭饭店都实用
警惕绦虫感染,医生教你预防方法
李白笔下的“绦”字意象
北京地铁乘车全攻略:票价、优惠、购票方式详解
《洗冤集录》:法医界的开山之作
数字化新技术助力法医鉴定:从虚拟解剖到人工智能
“老六所”法医学专业课程揭秘:培养法医人才的摇篮
法医职业健康管理,国标指南来了!
湄洲岛 vs 鼓浪屿:两大海岛景区深度对比
深圳到厦门自驾游:打卡三大网红景点,感受“海上花园”的独特魅力
职场和谐相处之道:如何建立好人缘
社交礼仪:职场人不可或缺的软实力
冬季养生必备:人参炖鸡怎么做?
人参炖鸡:从传统养生到现代创新,一碗鸡汤的养生智慧
国庆长假出行必看:晕车预防全攻略
晕车怎么办?三个心理调节技巧助你轻松应对
川藏线自驾游:高原环境下晕车的成因与解决方案
旅游旺季出行必备:专家详解晕车预防六大招
选对座位开窗通风,四招调整车内环境告别晕车
假冒银行名义诱骗贷款,银保监会提醒防范诈骗
如何在日常生活中融入可持续发展实践:简单有效的环保行动
服饰颜色搭配技巧
医学类十大热门专业,哪个是你的心头好?
双下肢肌肉萎缩患者的心灵治愈之路
医学专业如何助力疫情防控?从实践案例看医学人才的重要作用
老年人防肌少症,这些运动超实用!