1278 hdu 漂亮面料的设计

本文介绍了一种使用CAD技术设计面料图案的方法,通过定义特定的规则和飞数来生成二维矩阵,进而形成不同的面料图案。文章提供了输入输出示例及完整的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在的CAD技术已经能够很方便地设计出漂亮的面料,如图(b)所示。图(a)是所对应的组织图,它表示纱线的交织规律,经过分析表明:组织规律可以用一个二维矩阵准确描述出来。

图(a)的描述矩阵为:
0000101111110011000111000110011111101000
0001001111100110000111000011001111100100
0001011111001100001101100001100111110100
0010011110011100001000100001110011110010
0110111100111100011000110001111001111011
1100111001111000110000011000111100111001
1001111011110001110010011100011110111100
0001110111100011100111001110001111011100
0011110111000011000101000110000111011110
0111101110000010001000100010000011101111
1111101100000100001000100001000001101111
1111011000001100010010010001100000110111
1111011000011100110101011001110000110111
1110110000111001100000001100111000011011
1110110001110011001000100110011100011011
1101100011100010000000000010001110001101
1001100111000000010000010000000111001100
0011000110000100100010001001000011000110
0111001100001101000111000101100001100111
1110001000011010000101000010110000100011
1110011000110000001000100000011000110011
1100010001100000001000100000001100010001
1000110011000100010010010001000110011000
0000100110001000110111011000100011001000
0001100100010001100111001100010001001100
0001001000100011001111100110001000100100
0011001001000010001111100010000100100110
0110010010000000011111110000000010010011
1110010100000100111111111001000001010011
1100100000001101111101111101100000001001
1000101000011011111000111110110000101000
0001000000110011111010111110011000000100
0001010001100011110111011110001100010100
0010000011000111110111011111000110000010
0110100110001111101111101111100011001011
1100000100011111001101100111110001000001
1001001000111110011000110011111000100100
0000001001111100111000111001111100100000
0010010011111101110000011101111110010010
0100010111111111110000011111111111010001
1000100111111011100010001110111111001000
根据行业习惯,1表示黑色格子,0表示白色格子;左下角是起点,最下面一行是第一行,最左面一列是第一列;最上面一行的后一行是第一行,反之,第一行的前面一行是最上面一行,同理,第一列的前一列是最右边一列,最右一列的后一列是第一列。最左边的一列从起点开始依次是:10001100001110000011110011111110001100000,仔细观察后发现,可以用6个分数表示:1/3,2/4,3/5,4/2,7/3,2/5;分子表示1的个数,分母表示0的个数,这样的分数称之为“规则”。第二列从起点开始的规律和第一列的规律正好向上差一行,每一列都有和前一列相差的行数,以后都是类似,只是相差不同而已,由相差的行数可得到一个序列:1,1,2,2,2,2,2,1,1,1,1,1,1,3,1,1,1,2,2,1,-1,-2,-2,-1,-1,-1,-3,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-1,-1,负数为向下差;进一步分析表明,可以用14个分数简化之,即:1/2,2/5,1/6,3/1,1/3,2/2,1/1,-1/1,-2/2,-1/3,-3/1,-1/6,-2/5,-1/2;分子表示差的值,分母表示这样的差连续有几个,这样的分数称之为“飞数”,如果这样得到的最后一列和第一列不同,则说明不能生成漂亮面料。现在请你设计一个漂亮的面料。
 

Input
本题的输入共有5行,第一行是2个整数M,N;第二行是M个整数,表示“规则”的分子;第三行也是M个整数,表示“规则”的分母;其中第二行和第三行是按序对应;第四行是N个整数,表示“飞数”的分子;第五行也是N个整数,表示“飞数”的分母;其中第四行和第五行也是按序对应。输入数据保证生成的矩阵的行和列数不超过200;如果能够生成漂亮面料,则因为最后一列和第一列相同,所以不需输出最后一列;如果不能生成,则输出Can not make beautilful cloth !。
 

Output
按照前面题目的描述输出有0和1组成的二维矩阵。
 

Sample Input
6 14 1 2 3 4 7 2 3 4 5 2 3 5 1 2 1 3 1 2 1 -1 -2 -1 -3 -1 -2 -1 2 5 6 1 3 2 1 1 2 3 1 6 5 2
 

Sample Output
参见前面的例子。
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<math.h>
#include<queue>
using namespace std;

int n, m, count, sum, flag;
int feizi[1100],feimu[1100];
int guizi[1100],guimu[1100];
int map[220][220];

int main()
{
	int i, j, k, t, cas=0;
	
	while( scanf( "%d%d",&m,&n )!=-1 )
	{
		
		int ssum=0;
		int ss=0;
		for( i=0;i<m;i++ )
		{
			scanf( "%d",&feizi[i] );
			ssum+=feizi[i];
		}
		for( i=0;i<m;i++ )
		{
			scanf( "%d",&feimu[i] );
			ssum+=feimu[i];
		}
		sum=ssum;
		for( i=0;i<n;i++ )
		{
			scanf( "%d",&guizi[i] );
		}
		for( i=0;i<n;i++ )
		{
			scanf ("%d",&guimu[i] );
			ss+=guimu[i];
		}
		
		for( i=ssum;i>0; )
		{
			for( k=0;k<m;k++ )
			{
				for( j=1;j<=feizi[k];j++ )
					map[i--][0]=1;
				for( j=1;j<=feimu[k];j++ )
					map[i--][0]=0;
			}
		}
		int lie=0;
		for( i=0;i<n;i++ )
		{
			for( j=0;j<guimu[i];j++ )
			{
				lie++;
				for( k=ssum;k>0;k-- )
				{
					if( k>guizi[i] )
					{
						int te=k-guizi[i];
						if( k-guizi[i]>ssum )
							te=( k-guizi[i] )%ssum;
						if( te==0 )
							te=ssum;
						map[te][lie]=map[k][lie-1];
					}
					else
					{
						int tt=k;
						while( tt<=guizi[i] )
							tt+=ssum;
						map[tt-guizi[i]][lie]=map[k][lie-1];
					}
				}
				
			}
		}
		
		flag=1;
		for( i=ssum;i>0;i-- )
		{
			if( map[i][0]!=map[i][ss] )
			{
				flag=0;
				break;
			}
		}
		if( flag )
		{
			for( i=1;i<=ssum;i++ )
			{
				for( j=0;j<ss;j++ )
				{
					if( j==0 )
						printf( "%d",map[i][j] );
					else
						printf( "%d",map[i][j] );
				}
				printf( "\n" );
			}
		}
		else
			printf( "Can not make beautilful cloth !\n" );
	}
	
	return 0;
}





### 杭州电子科技大学操作系统课程设计资源 #### 关于操作系统课程设计的目标与要求 操作系统课程设计旨在让学生深入理解操作系统的原理及其实际应用。学生需掌握进程管理、内存分配、文件系统以及设备驱动等方面的知识,并能够独立完成一个小规模的操作系统模块开发或优化现有系统性能的任务。 #### 可供参考的学习材料和教程链接 对于希望获取更多关于杭州电子科技大学操作系统课程设计的信息,建议访问学校官网的教学资源页面或是联系授课教师获得官方发布的指南文档。此外,在线平台上也有许多优质的开源项目案例可供学习借鉴: - **GitHub**: 许多高校会将其OS实验项目的源码托管于此处,可以找到不同版本内核实现细节; - **Stack Overflow & 优快云论坛**: 当遇到具体技术难题时可在此类社区提问交流寻求解决方案; #### 示例代码片段:简易调度器模拟 下面给出一段简单的Python程序来演示如何创建一个多道批处理环境下的轮转法(Round Robin)CPU调度仿真工具[^1]: ```python import queue class Process: def __init__(self, pid, burst_time): self.pid = pid self.burst_time = burst_time def round_robin(processes, time_slice): ready_queue = queue.Queue() for p in processes: ready_queue.put(p) while not ready_queue.empty(): current_process = ready_queue.get() if current_process.burst_time > 0 : print(f"Executing process {current_process.pid}") if current_process.burst_time >= time_slice: current_process.burst_time -= time_slice if current_process.burst_time > 0: ready_queue.put(current_process) else: remaining_time = min(time_slice,current_process.burst_time) current_process.burst_time=0 if __name__ == '__main__': proc_list=[Process(1,8),Process(2,4),Process(3,9)] slice_duration=2 round_robin(proc_list,slice_duration) ``` #### 报告撰写模板结构框架 一份完整的课程设计报告通常应包含以下几个部分: - 封面页:题目名称、作者姓名学号班级等基本信息。 - 摘要摘要:简述研究背景意义目的方法结论等内容不超过一页纸长度。 - 正文主体章节划分如下: - 绪论Introduction:介绍选题缘由现状分析理论依据等前置知识铺垫工作。 - 方案设计Design Scheme:描述整体架构思路关键技术难点解决措施等具体内容阐述。 - 实验测试Experimentation and Testing:记录调试过程参数设置运行结果对比评价指标体系构建等情况说明。 - 总结Conclusion:总结研究成果不足之处未来改进方向展望等收尾性质的文字表达。 最后附上必要的参考资料列表以便读者查阅原始出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值