一种自动包装机的结构如图 1 所示。首先机器中有?n?条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品,放到流水线上。图 2 显示了顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态。
图1 自动包装机的结构
图 2 顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态
一种特殊情况是,因为筐的容量是有限的,当筐已经满了,但仍然有某条轨道的按钮被按下时,系统应强制启动 0 号键,先从筐里抓出一件物品,再将对应轨道的物品推落。此外,如果轨道已经空了,再按对应的按钮不会发生任何事;同样的,如果筐是空的,按 0 号按钮也不会发生任何事。
现给定一系列按钮操作,请你依次列出流水线上的物品。
输入格式:
输入第一行给出 3 个正整数?n(≤100)、m(≤1000)和?smax?(≤100),分别为轨道的条数(于是轨道从 1 到?n?编号)、每条轨道初始放置的物品数量、以及筐的最大容量。随后?n?行,每行给出?m?个英文大写字母,表示每条轨道的初始物品摆放。
最后一行给出一系列数字,顺序对应被按下的按钮编号,直到??1?标志输入结束,这个数字不要处理。数字间以空格分隔。题目保证至少会取出一件物品放在流水线上。
输出格式:
在一行中顺序输出流水线上的物品,不得有任何空格。
输入样例:
3 4 4
gplt
pata
omsa
3 2 3 0 1 2 0 2 2 0 -1
输出样例:
mata
#include
#include
int main()
{
int x,y,z,ba=0,num;//ba代表着篮子的起始值。num表示着输入的轨道编号。
int l,side,max;
int i;
scanf("%d %d %d",&l,&side,&max);//输入轨道数,轨道大小,以及篮子大小。
int b[l];
static int chushi[1000];//定义一个起始的值让数组都从零开始。
char a[l][side 1];
char d[max];//定义一个篮子用来放不符合的东西;
getchar();
for(i=0;i
{
gets(a[i]);
b[i]=strlen(a[i]); //为了防止初始值的不一样。
}
while(1)
{
scanf("%d",&num);
if(num==-1)break;
else if(num==0)//当为零的时候 要从篮子里取出一个
{
if(ba!=0)
{
printf("%c",d[ba-1]);
ba--;
}
}
else if(num>=1)
{
num=num-1;//这里是因为数组是从0开始的。
if(b[num]!=0)//这个轨道还有东西。
{
if(ba>=max)//如果篮子超出
{
printf("%c",d[ba-1]);//先拿出来一个
ba--;
d[ba]=a[num][chushi[num]];//再放进去一个。
ba ;
}
else if(ba
{
d[ba]=a[num][chushi[num]];
ba ;
}
chushi[num] ;//然后到下一个货物。
b[num]--;//轨道上物品数减一
}
}
}
return 0;
}
欢迎大家给出新的想法
/*建立于2018年9月17日,用于塑封机改造成热转印机
2019年1月9日继续完成
*/
#define ntcpin a0
#define setpin a1
#define heat 2
#define motor 3
#define red 4
#define blue 5
#define use 10
int tsetvalue;
double tnowvalue;
int tset;
double tnow;
bool play;
#include
#include
//latchpin, clockpin, datapin,
shiftdisplay display(8, 7, 6, common_cathode, 3);
void setup() {
pinmode(heat, output);
pinmode(motor, output);
pinmode(red, output);
pinmode(blue, output);
}
///
void loop() {
if (play) {
tsetvalue = analogread(setpin);
tset = 0.127077 * tsetvalue 50;
digitalwrite(blue, low);
digitalwrite(red, high);
put(tnow, tset, tset);
play = false;
}
else {
tnowvalue = analogread(ntcpin);
tnow = 200 * (1024 - tnowvalue) / tnowvalue;
tnow = log(tnow) / 3950;
tnow = (1 / 293.15) - tnow ;
tnow = (1 / tnow) - 273.15;
digitalwrite(red, low);
digitalwrite(blue, high);
put(tnow, tset, tnow);
play = true;
}
}
void put(int nowt, double sett , int play1) {
if (nowt > sett) {
display.set(play1);
digitalwrite(heat, low);
digitalwrite(use, high);
digitalwrite(motor, high);
display.show(400);
digitalwrite(motor, low);
display.show(100);
}
else {
display.set(play1);
digitalwrite(heat, high);
digitalwrite(use, low);
digitalwrite(motor, high);
display.show(500);
}
}
/*建立于2018年9月17日,用于塑封机改造成热转印机
2019年1月9日继续完成
2020年4月19日升级为max6675为传感器
*/
#define setpin a1
#define heat 2
#define red 4
#define blue 5
#define use 10
int tsetvalue;
int tset;
int tnow;
bool play;
#include
//latchpin, clockpin, datapin,
shiftdisplay display(8, 7, 6, common_cathode, 3);
#include "max6675.h"
int thermodo = 3;
int thermocs = 0;
int thermoclk = 9;
max6675 thermocouple(thermoclk, thermocs, thermodo);
void setup() {
pinmode(heat, output);
pinmode(red, output);
pinmode(blue, output);
pinmode(use, output);
}
///
void loop() {
tsetvalue = analogread(setpin);
tset = 0.127077 * tsetvalue 50;
digitalwrite(blue, high);
digitalwrite(red, low);
show3(tset);
tnow = thermocouple.readcelsius();
digitalwrite(blue, low);
digitalwrite(red, high);
show3(tnow);
if (tset < tnow) {
digitalwrite(heat, low);
digitalwrite(use, high);
}
else {
digitalwrite(heat, high);
digitalwrite(use, low);
}
}
void show3 (int t) {
display.set(t);
display.show(500);
}
下面是max6675.h
// this library is public domain. enjoy!
// www.ladyada.net/learn/sensors/thermocouple
#if arduino >= 100
#include "arduino.h"
#else
#include "wprogram.h"
#endif
class max6675 {
public:
max6675(int8_t sclk1, int8_t cs1, int8_t miso1);
double readcelsius(void);
double readfahrenheit(void);
// for compatibility with older versions:
double readfarenheit(void) { return readfahrenheit(); }
private:
int8_t sclk, miso, cs;
uint8_t spiread(void);
};
以下为max6675.cpp
// this library is public domain. enjoy!
// www.ladyada.net/learn/sensors/thermocouple
#ifdef __avr
#include
#elif defined(esp8266)
#include
#endif
#include
#include
#include "max6675.h"
max6675::max6675(int8_t sclk1, int8_t cs1, int8_t miso1) {
sclk = sclk1;
cs = cs1;
miso = miso1;
//define pin modes
pinmode(cs, output);
pinmode(sclk, output);
pinmode(miso, input);
digitalwrite(cs, high);
}
double max6675::readcelsius(void) {
uint16_t v;
digitalwrite(cs, low);
_delay_ms(1);
v = spiread();
v <<= 8;
v |= spiread();
digitalwrite(cs, high);
if (v & 0x4) {
// uh oh, no thermocouple attached!
return nan;
//return -100;
}
v >>= 3;
return v*0.25;
}
double max6675::readfahrenheit(void) {
return readcelsius() * 9.0/5.0 32;
}
byte max6675::spiread(void) {
int i;
byte d = 0;
for (i=7; i>=0; i--)
{
digitalwrite(sclk, low);
_delay_ms(1);
if (digitalread(miso)) {
//set the bit to 0 no matter what
d |= (1 << i);
}
digitalwrite(sclk, high);
_delay_ms(1);
}
return d;
}
还没有评论,来说两句吧...