9、数字图形找规律的一般办法

9、数字图形找规律的一般办法

(一般的分析方法也就是列出并总结左右相邻数之间,上下相邻数之间存在的规律以及这些规律与行列下标的关系,具体分析过程见代码注释。)

例题一:

输出图形:
在这里插入图片描述

#include<stdio.h>
int main(){
	int i, j, r, c=1, g;
	//i=1表示第一行,j=1表示第一列,以此类推。
	//row记录每行中的数,column记录本行起始的数,gap记录行相同列相邻的两个数的差值
	
	for(i=1; i<=6; i++){  
		r = c;					//1、第一列的数同时是每一行的起始数
		g = 1+i;				//2、第一行相邻数的差值从2开始;第二行的差值从3开始...故第i行的差值从1+i开始 
		for(j=1; j<=7-i; j++){	//3、第一行有7-1=6个数,即六列;第二行有7-2=5个数,即五列... 故第i行有7-i个数
			printf("%3d", r);
			r = r+g;
			g++;				//4、左右相邻的两数差值为1
		}
		printf("\n");
		
		c = c+i;				//5、第一列中,上下相邻的两数的差值从1到2到3...故总结可得:本行行序数加上本行的起始数,即为下一行的起始数
	}
	return 0;
} 

例题二:

输出图形:
在这里插入图片描述
要求:输出9行数据,不能单纯的用5条printf语句,使用两种算法(1)数组法(2)不用数组只用循环实现

/*
	(1)、循环: 
#include<stdio.h>
int main(){
	int k=0, i, j;
	for(i=1; i<=9; i++){
		for(j=9-i; j>0; j--){
			printf("   ");
		}
		for(j=i; j>0; j--){
			printf("%3d", ++k);
		}
		printf("\n");
	}
	
	return 0;
}
	(2)、数组:
*/
#include<stdio.h>
int main(){
	int n, m;
	scanf("%d", &n);		
	m=n*(n+1)/2;			//实现用户自定义行数,并用等差数列求和公式得数组容量,即共m个数
	 
	int a[m];
	for(i=0; i<m; i++){
		a[i]=i+1;	
	}
	 
	int i, j, k=0;
	for(i=0; i<n; i++){
		for(j=n-1-i; j>0; j--){
			printf("   ");
		} 
		//a[i]=i+1;			//赋值语句不能糅合到此处。比如第1行输出2 3时,只有a[1]赋得了2,a[2]并未赋值 
		j=i+1;				//第0行输出1个数,第1行输出2个数...用j记录这一行要输出几个数 
		while(j>0){
			printf("%3d", a[k++]); 
			j--; 			//因为i记录着第几行,不便修改,故不用i作下标,用另一个变量k
		}
		printf("\n");
	}
	return 0;
} 

例题三:

题目: 输出单月日历。
要求: 编写程序显示单月的日历,用户输入这个月总的天数和该月1号是星期几,如:
输入:
31 3
输出:
在这里插入图片描述

#include<stdio.h>
int main(){
	int i, n, m;			//n用来存储总天数,m用来存储星期几 
	printf("输入这个月总的天数和该月1号是星期几:");
	scanf("%d %d", &n, &m);

	for(i=1; i<m; i++){
		printf("    ");		//1号是星期x,则先输出x-1个空位
	}
	for(i=1; i<=n; i++){
		printf("%-4d", i);
		if(m%7 == 0){		//当m能被7整除时,说明本周已输出完,换行输出下一周 
			printf("\n");
		}
		m++;
	}
	return 0;
} 

发布了16 篇原创文章 · 获赞 0 · 访问量 324

猜你喜欢

转载自blog.csdn.net/NAU_LHT/article/details/104169120