第五届全国ITAT教育工程就业技能大赛决赛试题
C语言程序设计
1、求解钢材切割的最佳订单。(60分)
(1)描述:编写程序,从订单中选择一组订单对钢材作切割加工,使钢材得到最佳利用,约定每一次切割会损耗固定长度的钢材(约定该值为2)。已知线型钢材总长度、订单数和各订单需要的钢材长度;
(2)输入:钢材总长度s、订单数n、各定单需要的钢材长度;
(3)输出:可以使钢材得到最佳利用的订单号、该订单需要的钢材长度。
例如:
Please input total length of the steel s:28(回车)
Please input number of order n:8(回车)
Please input the orders :
5(回车)
6(回车)
7(回车)
8(回车)
9(回车)
10(回车)
12(回车)
15(回车)
屏幕输出:
Choice one order 1 length=5 order 3length=7 order 7 length=12
Choice two order 2 length=6 order 4length=8 order 6 length=10
Pressany key to quit …
2、产生无连续重复部分的字符串。(60分)
(1)描述:编写程序,产生由1,2,3这3个数字符号所构成、长度为n的字符串,并且在字符串中对于任何一个子串而言,都不会有相邻的、完全相同的子串;
(2)输入:字符串长度n;
(3)输出:无相邻重复子串的所有字符串,每个字符串换行输出。
例如:
Please input string length n: 5 (回车)
屏幕输出:
13121
13123
13212
……
附小女子第一题答案:
// 钢材订单.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
//把s分成a,b,c,每次的消耗为2
void part_1(int s,int a,int b,int c,int d,int e,int f,int g,int h)
{
for(int i=0;i<=s/a;i++)
{
for (int j=0;j<=s/b;j++)
{
for (int k=0;k<=s/c;k++)
{
for (int l=0;l<=s/d;l++)
{
for ( int m=0;m<=s/e;m++)
{
for (int n=0;n<=s/f;n++)
{
for ( int o=0;o<=s/g;o++)
{
for (int p=0;p<=s/h;p++)
{
int use=i*a+j*b+k*c+l*d+m*e+n*f+o*g+p*h+(i+j+k+l+m+n+o+p-1)*2;
if (use==s)
{
cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<m<<" "<<n<<" "<<o<<" "<<p<<endl;
}
}
}
}
}
}
}
}
}
}
//把A中的元素分成3份,使得每份元素之和等于s
//n为A[]的长度
void part_2(int A[],int n,int s)
{
for (int i=0;i<n;i++)
{
for (int j=i;j<n;j++)
{
for (int k=j;k<n;k++)
{
if (A[i]+A[j]+A[k]==s-4 && A[i]!=A[j] && A[j]!=A[k] && A[k]!=A[i])//考虑截取的顺序不同
{
cout<<A[i]<<" "<<A[j]<<" "<<A[k]<<" "<<endl;
}
}
}
}
}
//把A中的元素分成m份,使得每份元素之和等于s
//n为A[]的长度
void part_3(int A[],int n,int s,int m)
{
int i;
//添加代码
//……
{
int total=0;//实际使用的
for ( i=0;i<m;i++)
{
total+=A[i];
}
if (total==s-(m-1)*2)
{
for ( i=0;i<m;i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
/**/
cout<<"-----------------------"<<"第一种方法"<<"--------------------------"<<endl;
int order1=5;//订单1要求的钢材长度
int order2=6;//订单2要求的钢材长度
int order3=7;//订单3要求的钢材长度
int order4=8;//订单4要求的钢材长度
int order5=9;//订单5要求的钢材长度
int order6=10;//订单6要求的钢材长度
int order7=12;//订单7要求的钢材长度
int order8=15;//订单8要求的钢材长度
cout<<order1<<" "<<order2<<" "<<order3<<" "<<order4<<" "<<order5<<" "<<order6<<" "<<order7<<" "<<order8<<endl;
part_1(28,order1,order2,order3,order4,order5,order6,order7,order8);
/**/
cout<<"-----------------------"<<"第二种方法"<<"--------------------------"<<endl;
int A[8]={5,6,7,8,9,10,12,15};
part_2(A,8,28);
/*
cout<<"-----------------------"<<"第三种方法"<<"--------------------------"<<endl;
int A[8]={5,6,7,8,9,10,12,15};
part_3(A,8,28,3);
*/
system("pause");
return 0;
}