Aiuto pane celtico

ho 10 punti cosa posso migliorare ?

#include <iostream>
#include <fstream>
using namespace std;
  int N; int k=0;
  int f(int n, int m){
  	if ((n==1) &&( m== 1) ) return 0;
  	      else {
  	      
  	while ((n!=1) && (m!=1))
  	{  if ((n%2==0)&&(m%2==0))
	              {n=(int)n/2;
	               m=(int)m/2;
	               k++;              	
	              } 
				  else 
	if((n%2!=0)&&(m%2!=0)) {
		             n=2*n+1;
		             m=2*m+1;
		             k++;	}
		    else
		    if(n%2!=0)  {
		    			n=n+3;
						k=k+1;
						}
						else 
						{m=m+3;
						k=k+1;					
							
						}
				  
			  
				  	
  	}
  }
  	 return k;
  }

 int main() {
 
 freopen("input.txt", "r", stdin);
 freopen("output.txt", "w", stdout);

 int A,B;int k;
 cin >> A>>B;
 cout<<f(A,B);
 return 0;
 
 }

Non trovo il testo del problema, puoi linkarlo?

1 Mi Piace

Il testo del problema è questo: Pane celtico (taverna)
Non è disponibile su questa piattaforma perché è stato realizzato per un corso per docenti, se non sbaglio

https://digit.cms.di.unipi.it/#/task/oli4_taverna/statement

si infatti l’anno scorsp

Se sia N che M sono dispari il tuo codice fa

M = 2*M + 1```
Mentre il testo dice che 2*N+1 e 2*M+1 vadano aggiungi al valore precedente. Dovresti fare qualcosa del tipo di:
```N += 2*N + 1
M += 2*M + 1```
oppure
```N = 3*N + 1
M = 3*M + 1```

Altro possibile bug è che non c'è modo per il tuo codice di ritornare -1, cosa che dovrebbe avvenire se non è possibile arrivare alla coppia (1,1). Di questo non sono molto sicuro, è possibile che esista sempre una soluzione, come nel caso della congettura di Collatz.

Dario
1 Mi Piace