El programa pide q el ordenador adivine un número q yo pienso y me he encallado en como seguir...
Ayudaaaaaa!!!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define MAXDIGIT 6
#define XIFRES 4
#define MAXTRIES 100
void endevina (int);
void comptaEncerts (int[],int[],int*,int*);
void mostra (int[]);
void randNoRep(int[]);
int main(void){
int num;
printf("Pensa un nombre de %d xifres sense repetir i entre 0 i %d.\n Entra 1 per a que l'endevini altrament s'atura.\n",XIFRES,MAXDIGIT-1);
scanf("%d",&num);
srand((unsigned) time (NULL));
while(num==1){
endevina(1000* pow(XIFRES,MAXDIGIT));
printf("Pensa un nombre de %d xifres sense repetir i entre 0 i %d.\n Entra 1 per a que l'endevini altrament s'atura.\n", XIFRES,MAXDIGIT-1);
scanf("%d",&num);
}
return 0;
}
void endevina(int MaxIter){
int tries[MAXTRIES][XIFRES+2], nMorts, nFerits, i, j, k, mentida=0, control=0, val[XIFRES],valnou[XIFRES];
randNoRep(val);
mostra(val);
printf("\n");
printf("Entra quantes xifres tens ben situades:\n");
scanf("%d",&nMorts);
printf("Entra quantes xifres estan mal situades:\n");
scanf("%d",&nFerits);
/*Si te la llet d'adivinar-lo a la primera.*/
if(nMorts==XIFRES){
printf("He endevinat lo numero en %d intents.\n", control+1);
return;
}
/*Posem lo numero generat en una matriu on les dues ultimes columnes s'omplin segons els ferits i morts.*/
for(i=0; i<XIFRES; i++){
tries[control]= val;
}
tries[control][XIFRES]=nMorts;
tries[control][XIFRES+1]=nFerits;
for(j=0; j<MAXTRIES; j++){
randNoRep(valnou);
comptaEncerts(val, valnou, &nMorts, &nFerits);
control++;
for(k=0; k<control; k++){
if(tries[k][XIFRES]!=nMorts && tries[k][XIFRES+1]!=nFerits){
randNoRep(valnou);
mentida++;
k=-1;
if(mentida>=MaxIter){
printf("Hum... Crec que menteixes.. Em dono!\n");
return;
}
}
/*if(tries[k][XIFRES]==nMorts && tries[k][XIFRES+1]==nFerits) {
mostra(valnou);*/
}
}
return;
}
void comptaEncerts (int data1[], int data2[], int *nMorts, int *nFerits){
int i,j;
/*Comprovació de morts que hi ha.*/
*nMorts=0;
for(i=0; i<XIFRES; i++){
if(data1==data2){
nMorts++;
}
}
/*Comprovació de ferits que hi ha.*/
*nFerits=0;
for(i=0; i<XIFRES; i++){
for(j=0; j<i; j++){
if(data1==data2[j]){
nFerits++;
}
}
for(j=i+1; j<XIFRES; j++){
if(data1==data2[j]){
nFerits++;
}
}
}
return;
}
void mostra(int data[]){
int i;
for(i=0; i<XIFRES; i++){
printf("%1d",data);
}
return;
}
void randNoRep(int val[XIFRES]) {
int i,j;
val[0]=rand()%MAXDIGIT;
for(i=1; i<XIFRES; i++){
val=rand()%MAXDIGIT;
for(j=0; j<i; j++){
if( val==val[j]) {
val=rand()%MAXDIGIT;
j = -1; /*Pq així tenim que que j valdrà 0.*/
}
}
}
return;
}
Ayudaaaaaa!!!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define MAXDIGIT 6
#define XIFRES 4
#define MAXTRIES 100
void endevina (int);
void comptaEncerts (int[],int[],int*,int*);
void mostra (int[]);
void randNoRep(int[]);
int main(void){
int num;
printf("Pensa un nombre de %d xifres sense repetir i entre 0 i %d.\n Entra 1 per a que l'endevini altrament s'atura.\n",XIFRES,MAXDIGIT-1);
scanf("%d",&num);
srand((unsigned) time (NULL));
while(num==1){
endevina(1000* pow(XIFRES,MAXDIGIT));
printf("Pensa un nombre de %d xifres sense repetir i entre 0 i %d.\n Entra 1 per a que l'endevini altrament s'atura.\n", XIFRES,MAXDIGIT-1);
scanf("%d",&num);
}
return 0;
}
void endevina(int MaxIter){
int tries[MAXTRIES][XIFRES+2], nMorts, nFerits, i, j, k, mentida=0, control=0, val[XIFRES],valnou[XIFRES];
randNoRep(val);
mostra(val);
printf("\n");
printf("Entra quantes xifres tens ben situades:\n");
scanf("%d",&nMorts);
printf("Entra quantes xifres estan mal situades:\n");
scanf("%d",&nFerits);
/*Si te la llet d'adivinar-lo a la primera.*/
if(nMorts==XIFRES){
printf("He endevinat lo numero en %d intents.\n", control+1);
return;
}
/*Posem lo numero generat en una matriu on les dues ultimes columnes s'omplin segons els ferits i morts.*/
for(i=0; i<XIFRES; i++){
tries[control]= val;
}
tries[control][XIFRES]=nMorts;
tries[control][XIFRES+1]=nFerits;
for(j=0; j<MAXTRIES; j++){
randNoRep(valnou);
comptaEncerts(val, valnou, &nMorts, &nFerits);
control++;
for(k=0; k<control; k++){
if(tries[k][XIFRES]!=nMorts && tries[k][XIFRES+1]!=nFerits){
randNoRep(valnou);
mentida++;
k=-1;
if(mentida>=MaxIter){
printf("Hum... Crec que menteixes.. Em dono!\n");
return;
}
}
/*if(tries[k][XIFRES]==nMorts && tries[k][XIFRES+1]==nFerits) {
mostra(valnou);*/
}
}
return;
}
void comptaEncerts (int data1[], int data2[], int *nMorts, int *nFerits){
int i,j;
/*Comprovació de morts que hi ha.*/
*nMorts=0;
for(i=0; i<XIFRES; i++){
if(data1==data2){
nMorts++;
}
}
/*Comprovació de ferits que hi ha.*/
*nFerits=0;
for(i=0; i<XIFRES; i++){
for(j=0; j<i; j++){
if(data1==data2[j]){
nFerits++;
}
}
for(j=i+1; j<XIFRES; j++){
if(data1==data2[j]){
nFerits++;
}
}
}
return;
}
void mostra(int data[]){
int i;
for(i=0; i<XIFRES; i++){
printf("%1d",data);
}
return;
}
void randNoRep(int val[XIFRES]) {
int i,j;
val[0]=rand()%MAXDIGIT;
for(i=1; i<XIFRES; i++){
val=rand()%MAXDIGIT;
for(j=0; j<i; j++){
if( val==val[j]) {
val=rand()%MAXDIGIT;
j = -1; /*Pq així tenim que que j valdrà 0.*/
}
}
}
return;
}