本文目录一览:
- 1、C语言中的砝码称重问题
- 2、数控车床程序编程
- 3、求助...C语言程序设计题
- 4、数据结构c语言版问题
C语言中的砝码称重问题
1、以f(k):几种砝码组合能称出k的重量为状态DP全部n个砝码,然后枚举去掉的m个砝码的组合,对每种组合再DP一次,从f中减掉,剩下的就是能称出的不同重量,复杂度O(n * C(n, m) * m * max(a))≤38760000。
2、例程:
#includestdio.h
#includestdlib.h
#includestring.h
#includememory.h
/*a数组用于存储从n个整型数
* 据中取k个数字的数组下标值
* */
int a[100]={0};
/*data数组用于存储实际的数据,也就是所有砝码的
* 重量
* */
int data[4]={2,2,3,3};
/*sum数组用于保存再data中取k个树的和,注意
* 没有唯一化处理,也就是说可能里面存在重复
* 唯一化处理使用函数unique;
* */
int sum[100] = {0};
/*index_sum用于记录sum中最后一个数据的索引值
* */
int index_sum = 0;
/*这是一个递归实现,用于获取从[start,length-num]的
* 某一位数,这个位数对应了data数组的下标,num是从
* data中取几位数的,fujia是一个附加参数,用于记录当
* 前获取了几位树,从而方便操作数组a
* */
void GetNumberNew(int start, int length, int num, int fujia);
/*统计长度为length的sum数组中不重复元素的个数
* */
int unique(int[], int length);
int main()
{
//data数组长度
int length = 4;
for(int y = 1; y = length; y++)
{
/*从[0,num]中获取y个数*/
GetNumberNew(0, length, y, y);
}
printf("%d",unique(sum, index_sum));
return 0;
}
void GetNumberNew(int start, int length, int num, int fujia)
{
for(int i = start; i = length - num; i++)
{
if (num 0)
{
a[num - 1] = i;
/*从[i+1,length]中获取num-1数
* */
GetNumberNew(i +1, length, num-1, fujia);
}
else
{
for(int x = 0; x fujia; x++)
{
sum[index_sum] += data[a[x]];
}
index_sum++;
return;
}
}
}
int unique(int sum[], int length)
{
int temp = index_sum;
// printf("temp:%d ",temp);
for(int i = 0 ; i length - 1; i++)
{
for(int j = i + 1; j length; j++)
{
if(sum[i] == sum[j])
{
/*若有相同的数字则减1,并退出此次循环*/
temp--;
break;
}
}
}
return temp;
}
数控车床程序编程
数控编程方法:
数控机床程序编制(又称数控机床编程)是指编程者(程序员或数控机床操作者)根据零件图样和工艺文件的要求,编制出可在数控机床上运行以完成规定加工任务的一系列指令的过程。具体来说,数控机床编程是由分析零件图样和工艺要求开始到程序检验合格为止的全部过程。
数控机床编程步骤
1.分析零件图样和工艺要求
分析零件图样和工艺要求的目的,是为了确定加工方法、制定加工计划,以及确认与生产组织有关的问题,此步骤的内容包括:
确定该零件应安排在哪类或哪台机床上进行加工。
采用何种装夹具或何种装卡位方法。
确定采用何种刀具或采用多少把刀进行加工。
确定加工路线,即选择对刀点、程序起点(又称加工起点,加工起点常与对刀点重合)、走刀路线 、程序终点(程序终点常与程序起点重合)。
确定切削深度和宽度、进给速度、主轴转速等切削参数。
确定加工过程中是否需要提供冷却液、是否需要换刀、何时换刀等。
2.数值计算
根据零件图样几何尺寸,计算零件轮廓数据,或根据零件图样和走刀路线,计算刀具中心(或刀尖)运行轨迹数据。数值计算的最终目的是为了获得数控机床编程所需要的所有相关位置坐标数据。
3.编写加工程序单
常用数控机床编程指令
一组有规定次序的代码符号,可以作为一个信息单元存贮、传递和操作。
坐标字:用来设定机床各坐标的位移量由坐标地址符及数字组成,一般以X、Y、Z、U、V、W等字母开头,后面紧跟“-”或“-”及一串数字。
准备功能字(简称G功能):
指定机床的运动方式,为数控系统的插补运算作准备由准备功能地址符“G”和两位数字所组成,G功能的代号已标准化,见表2-3;一些多功能机床,已有数字大于100的指令,见表2-4。常用G指令:坐标定位与插补;坐标平面选择;固定循环加工;刀具补偿;绝对坐标及增量坐标等。
辅助功能字:用于机床加工操作时的工艺性指令,以地址符M为首,其后跟二位数字,常用M指令:主轴的转向与启停;冷却液的开与停;程序停止等。
进给功能字:指定刀具相对工件的运动速度进给功能字以地址符“F”为首,后跟一串字代码,单位:mm/min(对数控车床还可为mm/r)三位数代码法:F后跟三位数字,第一位为进给速度的整数位数加“3”,后二位是进给速度的前二位有效数字。如1728mm/min指定为F717。二位数代码法:F后跟二位数字,规定了与00~99相对应的速度表,除00与99外,数字代码由01向98递增时,速度按等比关系上升,公比为1.12。一位数代码法:对速度档较少的机床F后跟一位数字,即0 ~9来对应十种预定的速度。直接指定法:在F后按照预定的单位直接写上要求的进给速度。
主轴速度功能字:指定主轴旋转速度以地址符S为首,后跟一串数字。单位:r/min,它与进给功能字的指定方法一样。
刀具功能字:用以选择替换的刀具以地址符T为首,其后一般跟二位数字,该数代表刀具的编号。
模态指令和非模态指令 G指令和M指令均有模态和非模态指令之分模态指令:也称续效指令,一经程序段中指定,便一直有效,直到出现同组另一指令或被其他指令取消时才失效。见表2-3、表2-6 N001 G91 G01 X10 Y10 Z-2 F150 M03 S1500; N002 X15; N003 G02 X20 Y20 I20 J0; N004 G90 G00 X0 Y0 Z100 M02; 非模态指令:非续效指令,仅在出现的程序段中有效,下一段程序需要时必须重写(如G04)。
在完成上述两个步骤之后,即可根据已确定的加工方案(或计划)及数值计算获得的数据,按照数控系统要求的程序格式和代码格式编写加工程序等。编程者除应了解所用数控机床及系统的功能、熟悉程序指令外,还应具备与机械加工有关的工艺知识,才能编制出正确、实用的加工程序。
4.制作控制介质,输入程序信息
程序单完成后,编程者或机床操作者可以通过CNC机床的操作面板,在EDIT方式下直接将程序信息键入CNC系统程序存储器中;也可以根据CNC系统输入、输出装置的不同,先将程序单的程序制作成或转移至某种控制介质上。控制介质大多采用穿孔带,也可以是磁带、磁盘等信息载体,利用穿孔带阅读机或磁带机、磁盘驱动器等输入(输出)装置,可将控制介质上的程序信息输入到CNC系统程序存储器中。
5.程序检验
编制好的程序,在正式用于生产加工前,必须进行程序运行检查。在某些情况下,还需做零件试加工检查。根据检查结果,对程序进行修改和调整,检查--修改--再检查--再修改……这往往要经过多次反复,直到获得完全满足加工要求的程序为止。
上述编程步骤中的各项工作,主要由人工完成,这样的编程方式称为“手式编程”。在各机械制造行业中,均有大量仅由直线、圆弧等几何元素构成的形状并不复杂的零件需要加工。这些零件的数值计算较为简单,程序段数不多,程序检验也容易实现,因而可采用手工编程方式完成编程工作。由于手工编程不需要特别配置专门的编程设备,不同文化程度的人均可掌握和运用,因此在国内外,手工编程仍然是一种运用十分普遍的编程方法。
数控机床编程中的代码
数控机床编程编制过程
把图纸上的工程语言变为数控装置的语言,并把它记录在控制介质上。
数控机床编程的主要内容
分析图样、确定工艺过程:进行零件工艺分析,确定加工路线、切削用量等工艺参数。
数值计算:对形状简单的零件(如直线和圆弧组成的零件)的轮廓加工,计算几何元素的起点、终点、圆弧的圆心、两元素的交点或切点的坐标值等;对形状复杂的零件(如非圆曲线、曲面组成的零件),用直线段或圆弧段逼近,由精度要求计算出节点坐标值,这种情况可用计算机完成数值计算。
编写零件加工程序单编程人员根据数控系统规定的功能指令代码及程序段格式,逐段编写加工程序单。
程序校验与首件试切在有CRT图形显示屏的数控机床上,用模拟刀具与工件切削过程的方法进行检验,此方法只能检验出运动轨迹是否正确,不能查出被加工零件的加工精度,因此,要进行零件首件试切。
数控机床编程程序段格式
每个程序段是由程序段编号,若干个指令(功能字)和程序段结束符号组成。
需要说明的是,数控机床的指令格式在国际上有很多标准,并不完全一致。而随着数控机床的发展,不断改进和创新,其系统功能更加强大和使用方便,在不同数控系统之间,程序格式上存在一定的差异,因此,在具体进行某一数控机床编程时,要仔细了解其数控系统的编程格式,参考该数控机床编程手册。
求助...C语言程序设计题
穷举法得到结果
9 20 17 14 15 16 13 18 19 12 11 8 5 6 7 10 3 4 1 2
程序如下
bool IsPrime(int n){ //是否素数
if (n==1) return false;
for (int i=2;i*i=n;i++)
if (n%i==0) return false;
return true;
}
bool check(int a[9],int i, int b){
for (int j=0;j=i;j++)
if (a[j]==b) return false;
if (IsPrime(a[i]+b)) return true;
return false;
}
main()
{
int n[9]={0};
bool found=true;
for (int i1=1;i1=9;i1++){
n[0]=i1;
for (int i2=1;i2=20;i2++){
if (check(n,0,i2)) n[1]=i2;
else continue;
for (int i3=1;i3=20;i3++){
if (check(n,1,i3)) n[2]=i3;
else continue;
for (int i4=1;i4=20;i4++){
if (check(n,2,i4)) n[3]=i4;
else continue;
for (int i5=1;i5=20;i5++){
if (check(n,3,i5)) n[4]=i5;
else continue;
for (int i6=1;i6=20;i6++){
if (check(n,4,i6)) n[5]=i6;
else continue;
for (int i7=1;i7=20;i7++){
if (check(n,5,i7)) n[6]=i7;
else continue;
for (int i8=1;i8=20;i8++){
if (check(n,6,i8)) n[7]=i8;
else continue;
for (int i9=1;i9=20;i9++){
if (check(n,7,i9)) n[8]=i9;
else continue;
for (int i10=1;i10=20;i10++){
if (check(n,8,i10)) n[9]=i10;
else continue;
for (int i11=1;i11=20;i11++){
if (check(n,9,i11)) n[10]=i11;
else continue;
for (int i12=1;i12=20;i12++){
if (check(n,10,i12)) n[11]=i12;
else continue;
for (int i13=1;i13=20;i13++){
if (check(n,11,i13)) n[12]=i13;
else continue;
for (int i14=1;i14=20;i14++){
if (check(n,12,i14)) n[13]=i14;
else continue;
for (int i15=1;i15=20;i15++){
if (check(n,13,i15)) n[14]=i15;
else continue;
for (int i16=1;i16=20;i16++){
if (check(n,14,i16)) n[15]=i16;
else continue;
for (int i17=1;i17=20;i17++){
if (check(n,15,i17)) n[16]=i17;
else continue;
for (int i18=1;i18=20;i18++){
if (check(n,16,i18)) n[17]=i18;
else continue;
for (int i19=1;i19=20;i19++){
if (check(n,17,i19)) n[18]=i19;
else continue;
for (int i20=1;i20=20;i20++){
if (check(n,18,i20)) n[19]=i20;
else continue;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
for (int i=0;i20;i++)
if(n[i]==0) found=false;
if (found)
for (i=0;i20;i++)
printf("%d ",n[i]);
else
printf("没有符合的排列\n");
}
数据结构c语言版问题
按列为主序存放于一个连续的存储空间中
a[10,20]一列10个元素,那么a[6,2],2表示第三列(前面有0,1),前面两列就是20
第三列6个,得到20+6=26,开始地址为200,则200+26=226