Peršokti į turinį

[c++] Kaip patikrintį numerį


Galardas

Recommended Posts

Sveiki reikia pagalbos man dabar.. Uždavinys yra ilgas, bet dalį padariau.. Kita dalis reikia patikrinti numerius ar numerio skaitmenys visi vienodi ar numerio skaitmenys griežtai didėja.


 


Numeris negali būti didesnis nei 100000 ir negali būti mažesnis už 1.


Tai tarkim pirmas numeris yra 2222 kaip man dabar patikrinti ar visi tie skaitmenys yra vienodi.


Arba numeris yra 23568 kaip patikrinti, kad jei griežtai didėja?


 


Buvau padaręs, kad skaičių išdalintų nuo 100000 iki 1 ir kiekvieną skaitmenį patikrintų, bet tarkim 2222/100000 = 0 ir man tą 0 sulygina su kitais skaitmenimis ir gaunasi, kad numerio skaitmenys nėra lygūs arba griežtai nedidėja.. Padėsit kas? :D


Nuoroda į komentarą
Dalintis per kitą puslapį

#include <iostream>
#include <sstream>
#include <cstring>

using namespace std;

int main()
{
	int a;
	cin >> a;
	
	ostringstream out;
	out << a;
	const char *aSkaiciai = out.str().c_str();
	bool vienodi = true;
	
	for(int i=0; i<strlen(aSkaiciai); i++){
		for(int j=0; j<strlen(aSkaiciai); j++){
			if(aSkaiciai[i] != aSkaiciai[j])
				vienodi = false;
		}
	}
	
	cout << (vienodi ? "vienodi" : "nevienodi") << endl;
	
	return 0;
}

o del to ar grieztai dideja skaiciai, tai nelabai supratau. jei tu turi 2 skaicius ir nori paziureti per kiek yra vienas uz kita didesnis, tai tada:

int skc1 = 1;
int skc2 = 8;
int a = skc1 - skc2;

jei a bus neigiamas skaicius, tai skc2 didesnis uz skc1 per tiek kiek yra a reiksmeje (be minuso), o jei teigiamas, tai skc1 didesnis uz skc2 per tiek kiek yra a reiksmeje. nu o tada gali pagal skirtuma ziureti ar grieztai dideja ar ne.

  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

tai tipo nori tikrint ar viename integeryje skaiciai vienas po kito dideja per 1? nu arba kas daugiau.. pabandyk sita koda:

#include <iostream>
#include <sstream>
#include <cstring>

using namespace std;

int main()
{
	int a;
	cin >> a;
	
	ostringstream out;
	out << a;
	const char *aSkaiciai = out.str().c_str();
	bool grieztaiDideja = true;
	
	for(int i=0; i<strlen(aSkaiciai)-1; i++){
		int b = aSkaiciai[i] - '0';
		int c = aSkaiciai[i+1] - '0';
		
		//Sitas variantas tikrina ar skaiciai dideja per 1
		/*if(c - b != 1){ //i+1 skaicius nuo i padidejo ne per 1, o daugiau, arba isvis pamazejo
			grieztaiDideja = false;
			break;
		}*/
		
		//Sitas variantas leidzia skaiciam didet ir per 1 ir per 2
		if(c - b < 1 || c - b > 2){
			grieztaiDideja = false;
			break;
		}
	}
	
	cout << (grieztaiDideja ? "grieztai dideja" : "dideja ne grieztai") << endl;
	
	return 0;
}
Redaguota , nario -Modestas
Nuoroda į komentarą
Dalintis per kitą puslapį

Jo truputėlį parašiai rimčiau nei aš pats dar žinau :D Char, bool, const, ostringstream.. Mokinuose savarankiškai olimpijadai, tai kažkaip manau reiktų dar praplėsti žinias.. :D

 

O dėl didėjimo vienetais nesvarbu, svarbu sekantis skaičius didesnis būtų.

Nuoroda į komentarą
Dalintis per kitą puslapį

Jo truputėlį parašiai rimčiau nei aš pats dar žinau :D Char, bool, const, ostringstream.. Mokinuose savarankiškai olimpijadai, tai kažkaip manau reiktų dar praplėsti žinias.. :D

 

O dėl didėjimo vienetais nesvarbu, svarbu sekantis skaičius didesnis būtų.

jei svarbu sekantis skaicius didesnis butu, tai if salyga for cikle tokia butu:

if(c - b < 1){
	grieztaiDideja = false;
	break;
}

o jeigu naudoji c++11, tai gali koda ir paprasciau pasirasyti:

int a;
cin >> a;
	
char const *aSkaiciai = to_string(a).c_str();
bool grieztaiDideja = true;

for(int i=0; i<to_string(a).length()-1; i++){
	int b = aSkaiciai[i] - '0';
	int c = aSkaiciai[i+1] - '0';
	
	if(c - b < 1){
		grieztaiDideja = false;
		break;
	}
}

nes jeigu ne c++11, tai ir turi naudoti ostringstream vietoje to_string.

Nuoroda į komentarą
Dalintis per kitą puslapį

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    Nėra registruotų narių peržiūrinčių šį forumą.


×
×
  • Sukurti naują...