aiutoAccensionePC

Chi può aiutarmi ? Il codice di accensione PC da compilazione fallita

#include<fstream>
#include<iostream>
using namespace std;
void Accendi (int N, int acceso[], int pulsante [])
{ for (int i=N; i>=1; i--)
{
	//se il computer i è spento premiamo il pulsante i,
	// e cambiamo lo stato dei computer di conseguenza
if (!acceso[i]) { pulsante [i]=1;
	 // cerchiamo tutti i j che dividono i ma solo fino 
	 // a j <= sqrt(i)
for (int j=1; j*j<=i; j++)
// se j è un divisore di i allora i/j è un divisore di i
	 
if (i%j==0)
	 { //cambia lo stato del computer j
	   acceso [j]=1;
 // Cambia lo stato del computer i/j, ma solo se questo non
// coincide con j. Questo è per evitare ad esempio il caso
// i = 4, j = 2, in cui altrimenti lo stato del computer 2
// verrebbe cambiato due volte invece di una sola

if (j * j != i)
            acceso[i/j]= 1;  
	   
	   
	 }
	 
	}

}
for (int i=1;i<=N;i++) cout<<pulsante[i];
}
int main ()
{  freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	int N;
	cin>>N;
	int acceso[100]={0};
	for ( int i=1;i<=N; i++) cin>>acceso[i];
	int pulsanti[100]={0};
	Accendi (N, acceso,pulsanti);
	
	return 0;



}

Prova a togliere il main

1 Mi Piace

il codice in locale mi dà l’output corretto il correttore mi dà compilazione fallita

#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void Accendi (int N, int acceso[], int pulsante [])
{ for (int i=N; i>=1; i--)
{
	//se il computer i è spento premiamo il pulsante i,
	// e cambiamo lo stato dei computer di conseguenza
if (!acceso[i]) { pulsante [i]=1;
	 // cerchiamo tutti i j che dividono i ma solo fino 
	 // a j <= sqrt(i)
for (int j=1; j*j<=i; j++)
// se j è un divisore di i allora i/j è un divisore di i
	 
if (i%j==0)
	 { //cambia lo stato del computer j
	   acceso [j]^=1;
 // Cambia lo stato del computer i/j, ma solo se questo non
// coincide con j. Questo è per evitare ad esempio il caso
// i = 4, j = 2, in cui altrimenti lo stato del computer 2
// verrebbe cambiato due volte invece di una sola

if (j * j != i)
            acceso[i/j]^= 1;  
	   
	   
	 }
	 
	}

}
for (int i=1;i<=N;i++) cout<<pulsante[i];
}
int main() {
    freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	int N;
	cin>>N;
	//cout<<N;
	int acceso[100]={0};
	for ( int i=1;i<=N; i++) {
	cin>>acceso[i]; 
	 }
	//for ( int i=1;i<=N; i++) cout<<acceso[i];
	int pulsanti[100]={0};
	Accendi (N, acceso,pulsanti);
	
	return 0;
	
	
}

Come ha detto @bortoz, quando sottometti sul correttore per questo problema non devi mandare la funzione main, è già implementata nel grader.

2 Mi Piace

anche cambiando il codice ? non devo mandare la funzione main
perchè in locale è sempre corretto

#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct pulsanti {
	vector <int> multipli;
	bool trovato=false;
};
int main(){
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	int n;
	cin>>n;
	int a[n+1];
	vector <int > coda;
	for(int i=1;i<=n;i++){
		cin>>a[i];
			if(a[i]== 0){
		coda.push_back(i);
			
	}
	}
	
	pulsanti pulsante[n+1];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){ 
			if(i%j == 0){
			
				pulsante[i].multipli.push_back(j);
	
			}
		}
	}
vector <int> premuti;

	while(!coda.empty()){
		premuti.push_back(coda.back());
		for(int i=0;i<pulsante[coda.back()].multipli.size();i++){     
				        
				if(a[pulsante[coda.back()].multipli[i]] == 0){ 
					a[pulsante[coda.back()].multipli[i]]=1;	
				}
				else {
					a[pulsante[coda.back()].multipli[i]]=0;	
					
				}
}
	coda.clear();
	for(int i=1;i<=n;i++){
		if(a[i]== 0){
			coda.push_back(i);
		}
	}
}
	sort(premuti.begin(),premuti.end());



for(int i=1;i<=n;i++){
	for(int j=0;j<premuti.size();j++){
		if(i == premuti[j]){
			pulsante[i].trovato=true;
		}
	}
	if (pulsante[i].trovato == true){
		cout<<1<<" ";
		
	}
	else {
		cout<<0<<" ";
	}
}		
return 0;
}

Sinceramente non capisco cosa intendi. Quello che voglio dire è che per questo problema il main è già implementato nel grader e che quindi, come dice nel testo, tu devi mandare solo la funzione Accendi, che verrà chiamata dal grader. Volendo sei comunque libera di scrivere e usare altre funzioni, purché non siano il main.

2 Mi Piace