¿Pregunta de programación de la escuela primaria en lenguaje C para recoger manzanas rojas?
Ideas de programación:
1. Tanto los niños como las manzanas tienen varios atributos (como altura, número, estado, etc., y también se pueden extender a nombre, peso, etc. ). Por tanto, los niños y las manzanas deben definirse como estructuras.
2. El número de personas y manzanas se ingresa manualmente, por lo que el tamaño de la matriz es incierto. Se debe usar una matriz dinámica (si no se usa dinámica, el tamaño de la entrada del usuario debe ser limitado). ).
3. La pregunta requiere que se seleccione el número máximo de elementos, comenzando desde el hijo más corto, por lo que se debe ordenar la matriz de hijos.
4. La función recursiva implementa la lógica de recoger manzanas. Cada persona coge aleatoriamente dos manzanas que tenga a su alcance (si no hay suficientes, coge una). (Cada vez que la función recursiva encuentra una manzana que se puede recoger, hay una probabilidad de 50 de que se recoja. Si no se recoge ninguna manzana, se recogerá la última manzana de forma predeterminada).
El siguiente es el código (cls en la función de actualización de la consola solo se puede ejecutar en el sistema Windows, otros sistemas operativos se pueden eliminar o modificar):
#includelt; hgt;
#includelt;stdlib.hgt;
#includelt;time.hgt;
#includelt;malloc.hgt;
#define AFR 7/ /El número de filas de la imagen de la manzana
#define AFC 6//El número de filas de la imagen de la manzana
#define CFR 5//El número de filas de la imagen secundaria
# define CFC 6//El número de filas de las imágenes infantiles
typedef struct apple//Estructura que representa los datos de Apple
{
int Aid; // Número de manzana
int height; // La altura de la manzana
int status //0: significa que no lo tiene; sido elegido. 1: Indica que se ha extraído
char aframe[AFR][AFC]; // Indica la imagen de la manzana
}APPE;
typedef struct childern/ /Indica el número del niño
{
int cid; //El número del niño
int height //La altura del niño
int n; //El número de manzanas recogidas por el niño
char cframe[CFR][CFC] //Indica la imagen del niño
APPE **appes; ; // Matriz de punteros de estructura de manzanas seleccionados por los niños
}CHN;
int n, m //El número de manzanas y niños se establece como una variable global
APPE *setApps(); //Configurar Apple. La matriz de estructura se devuelve correctamente y NULL se devuelve en caso de error
CHN *setChns() // Configura el pequeño amigo. Lo mismo que arriba.
int orderChnByHeight(CHN *chns); //Organiza la matriz de los niños en orden ascendente de altura
int getApple(APPE *appes, CHN *chns, char (*strInfo)[ 100] ); //Recursivamente, simula que los niños eligen manzanas en secuencia.
Devolución de excepción -1
int showFrame(APPE *appes, CHN *chns, char (*strInfo)[100]);
int main()
{
int i;
char (*strInfo)[100]=NULL; //Se utiliza para mostrar el flujo de operación
APPE *appes=NULL;
CHN *chns=NULL
aplicaciones=setApps();
chns=setChns()
if(orderChnByHeight( chns )==-1)return 1;
srand(time(NULL));
strInfo=(char (*)[100])malloc(sizeof(char *) * m*100);
for(i=0;ilt;m;i)strInfo[i][0]=0;
if(!strInfo) devuelve 1;
showFrame(appes, chns, strInfo);
return 0
}
int showFrame(APPE *appes, CHN *; chns , char (*strInfo)[100])
{
static int k=1
int i, j
system("cls");
printf("\n==============El valor superior de cada grupo de imágenes es la altura y el valor inferior es el número= ===========\n");
printf("\n===============Para asegurarse de que puede obtener la mayor cantidad de manzanas, los niños están ordenados en orden ascendente============\n");
for(i=0;ilt;AFR;printf("\ n"),i )
for(j=0;jlt;n;j)
printf("s ?", apps[j].aframe[i]);
?printf("\n");
for(i=0;ilt;CFR;printf("\n"),i )
for(j=0;jlt ; m; j )
printf("s ?",chns[j].cframe[i]);
printf("\n= ======= ============================================ ======= ==========\n");
printf("Flujo de operación:\n");
for(i =0;ilt;m; i )
printf("s\n", strInfo[i]);
fflush(stdin); ("Presione cualquier tecla para continuar con el siguiente paso. . . . . .
\n");
getchar();
if(getApple(appes, chns, strInfo)==-1)return -1;
if (k)showFrame(appes, chns, strInfo), k--;
return 1
}
int getApple(APPE *appes, CHN * chns, char (*strInfo)[100])
{
static int i=0, aflag, cflag;
int j, indexSave; p>
p>
if(appes==NULL||chns==NULL) return -1;
if(chns[i].n==2)i; El hijo actual tiene suficiente 2, reemplácelo con el siguiente hijo
if(i==m)return 1; //Todos lo han tomado, finalice la recursión
aflag=0;
for(j=0;jlt;n;j)
if(appes[j].status==0) {aflag=1;break;} p>
if(aflag= =0) return 1; //Se toman todas las manzanas, finaliza la recursión
indexSave=-1;
cflag=0;
for(j= 0; jlt; n; j )
{
if(appes[j].status==0 amp; amp; apps[j] .heightlt;=chns[i] .height)
{
cflag=1;
indexSave=j
if( rand()2)//Cada vez que se encuentra, hay una probabilidad de 50 de tomarla. Si no se seleccionan todas las manzanas disponibles, elija el último objetivo encontrado
break
}
} p>
if(cflag)//El proceso de un niño tomando una manzana
{
apps[indexSave]. status=1;
//Cambiar imagen inicial de Apple
sprintf(appes[indexSave].aframe[6], " ");
chns[i ].appes[chns[i].n]= amp;appes[indexSave];
chns[i].n;
if(chns[i].n== 1)
{
p>//Cambiar la imagen inicial del niño
sprintf(chns[i].cframe[0], "cc/", 3, 1);
sprintf(strInfo [i], "El niño con el número d tomó 1 manzana (número d)\n", chns[i].cid, chns[i].appes[ 0]-gt; ayuda);
}
if(chns[i].n==2)
{
//Cambiar la imagen inicial del niño
sprintf(chns[i].cframe[ 0 ], " ccc ", 3, 1, 3);
sprintf(strInfo[i], "El niño con el número d tomó 2 manzanas (número d y número d)\n", chns [ i].cid, chns[i].appes[0]-gt; ayuda, chns[i].appes[1]-gt);
}
}
if(cflag==0 amp; amp; chns[i].n==0) sprintf(strInfo[i], "¡El niño número d no recibió la manzana y estaba muy frustrado!" \n", chns[i].cid), i;
if(cflag==0 amp; amp; chns[i].n==1) i;
return getApple(appes, chns, strInfo);
}
int orderChnByHeight(CHN *chns)
{
CHN chnTemp;
int i, j;
chnTemp.appes=(APPE **)malloc(sizeof(APPE*)*2); .appes) devuelve -1;
else
{
chnTemp.appes[0]=chnTemp.appes[1]=NULL;
if(chns)
for(i=0;ilt;m-1;i)
for(j=i 1;jlt;m;j) p>
if(chns[i].heightgt; chns[j].height)
chnTemp=chns[i], chns[i]=chns[j], chns[j]= chnTemp;
}
gratis(chnTemp.appes
devuelve 1; *setChns()
{
int i;
CHN *chns=NULL;
printf("Ingrese el nombre personal del niño nombre Número: ");
scanf("d",amp; m);
chns=(CHN *)malloc(sizeof(CHN)*m);
if(!chns) return NULL;
printf("Ingrese la altura de d niños (no más de 3 enteros):\n", m);
for (i=0;ilt;m;i)
{
chns[i].cid=i 1;
scanf("d" , amp ;chns[i].height);
chns[i].height=chns[i].height1000; //Excediendo la intercepción de 3 dígitos
chns[i].n=0;
chns[i].appes = (APPE **)malloc(sizeof(APPE*)*2);
if(!chns[i].appes) return NULL;
chns[i].appes [ 0]=chns[i].appes[1]=NULL;
//Establece la imagen inicial del niño
sprintf(chns[i].cframe[0], " \\ c/ ", 1);
sprintf(chns[i].cframe[1], " / \\ ");
sprintf(chns[i].cframe [2 ], "-----");
sprintf(chns[i].cframe[3], "Alto 3d", chns[i].height
<); p> sprintf(chns[i].cframe[4], "ID3d", chns[i].cid}
return chns; >}
APPE *setApps()
{
int
APPE *appes=NULL; p> printf("Ingrese el número de manzanas:");
scanf("d", amp; n
apps=(APPE *)malloc(sizeof( APPE) *n);
if(!appes) return NULL;
printf("Ingrese la altura de d manzanas (no más de 3 dígitos enteros):\n" , n) ;
for(i=0;ilt;n;i)
{
aplicaciones[i].aid=i 1; p>
scanf("d",amp;appes[i].height);
apps[i].height=appes[i].height1000;//Excediendo la intercepción de 3 dígitos p>
apps[i].status=0;
//Establecer imagen inicial de Apple
sprintf(appes[i].aframe[0], "High 3D" , aplicaciones[i].height);
sprintf(appes[i].aframe[1], "ID3d", aplicaciones[i].aid); [i] .aframe[2], "-----");
sprintf(appes[i].aframe[3], "?c ?", '|'); p>
sprintf(appes[i].aframe[4], "?c ?", '|');
sprintf(appes[i].aframe[5], "?c); ?", '|');
sprintf(appes[i].af
rame[6], "?c ?", 3);
}
return ?appes;
}