Pereiti prie turinio

Kaip išspręsti? (C)


Rekomenduojami pranešimai

Kol kas išėjo padaryti tik tiek, kad randa keliaženklis skaičius įvestas ir tuos skaičius surašyti į masyvą.

 

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main ()
{
	     int sk, i, skaitmuo, mas[50];
	     printf("Iveskite skaiciu: \n");
	     scanf("%d", &sk);
	     i=0;
	     while (sk != 0)
	  	{
              skaitmuo=sk%10;
              sk=sk/10;
              i++;
              mas[i]=skaitmuo;
     	}
		printf("Ivestas skaicius yra %d-zenklis \n", i);
		for (i;i>0;i--)
     	{
		       printf("%d\n", mas[i]);
     	}
		system("pause");
		return 0;
}

 

http://www.part.lt/img/de343c1866d792f7016c84e9ca3204a3197.jpg

Redagavo unrixas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, gali bandyt is eiles imt visus skaicius ir tikrint jis sudarytas is reikiamu skaitmenu biggrin.gif

Pvz. Ivestas 135 - trizenklis. Pradedam nuo 100 ir tikrinam ar sudarytas is tu triju skaitmenu 1, 3 ir 5, jei taip - spausdinam. Toliau tikrinam 101, 102... ir t.t. iki 999

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, gali bandyt is eiles imt visus skaicius ir tikrint jis sudarytas is reikiamu skaitmenu biggrin.gif

Pvz. Ivestas 135 - trizenklis. Pradedam nuo 100 ir tikrinam ar sudarytas is tu triju skaitmenu 1, 3 ir 5, jei taip - spausdinam. Toliau tikrinam 101, 102... ir t.t. iki 999

 

Bet tokiu būdu labai daug žaidimo :D Gal galėtum parašyti, kaip tas tikrinimas atrodytu? ;)

Redagavo unrixas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

I tema, taciau neisbaigta

#include <regex>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;
int main()
{
int vienas, du;
cout << "Iveskite pirmaji sveika skaiciu su 1 3 5";
cin >> vienas;
   char buffer [33];
   itoa (vienas,buffer,10);

   regex_replace (buffer,"/([^135])/","\$1");
if (strlen(buffer) == 0) {

cout << "skaitmenys tinkami "  << endl;
}
else 
{ 
cout << "skaitmenys netinkami  "  << endl; 
}

return 0;
}

Redagavo saknis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

I tema, taciau neisbaigta

#include <regex>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
int main()
{
int vienas, du;
cout << "Iveskite pirmaji sveika skaiciu su 1 3 5";
cin >> vienas;
   char buffer [33];
   itoa (vienas,buffer,10);

   regex_replace (buffer,"/([^135])/","\$1");
if (length(buffer) == 0) {

cout << "skaitmenys tinkami "  << endl;
}
else 
{ 
cout << "skaitmenys netinkami  "  << endl; 
}

return 0;
}

 

Čia kartais ne C++? Ir šiek tiek ne taip padarei, nes gali įvesti bet kokį skaičių pvz.: 54875

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pirmą žingsnį jau padarei - susirašei skaitmenis į masyva. Toliau reiktų masyvą surikiuoti (nes skaičius reikia generuoti didėjimo tvarka).

 

Lengviausią būtų viską atlikti su rekursija.

 

void generuoti(int skaitmenys[], bool paimta[], int skaicius[], int gylis, int kiekSkaitmenu) {
   if (gylis == kiekSkaitmenu) {
       spausdinti(skaicius);
   } else {
       for (int i = 0; i < kiekSkaitmenu; i++) {
           if (!paimta[i]) {
               paimta[i] = true;
               skaicius[gylis] = skaitmenys[i];
               generuoti(skaitmenys, paimta, skaicius, gylis + 1, kiekSkaitmenu);
               paimta[i] = false;
           }
       }
   }
}

 

Ir iškvieti:

int skaitmenys[kiekSkaitmenu] = {skaitmenų masyvas};
bool paimta[kiekSkaitmenu] = {visos reikšmės false};
int skaicius[kiekSkaitmenu];

generuoti(skaitmenys, paimta, skaicius, 0, kiekSkaitmenu)

 

Jeigu skaitmenys skaičiuje gali pasikartoti, tada reikia tikrinti, kad dukart tokių pačių skaičių nespausdintum.

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pirmą žingsnį jau padarei - susirašei skaitmenis į masyva. Toliau reiktų masyvą surikiuoti (nes skaičius reikia generuoti didėjimo tvarka).

 

Lengviausią būtų viską atlikti su rekursija.

 

void generuoti(int skaitmenys[], bool paimta[], int skaicius[], int gylis, int kiekSkaitmenu) {
   if (gylis == kiekSkaitmenu) {
       spausdinti(skaicius);
   } else {
       for (int i = 0; i < kiekSkaitmenu; i++) {
           if (!paimta[i]) {
               paimta[i] = true;
               skaicius[gylis] = skaitmenys[i];
               generuoti(skaitmenys, paimta, skaicius, gylis + 1, kiekSkaitmenu);
               paimta[i] = false;
           }
       }
   }
}

 

Ir iškvieti:

int skaitmenys[kiekSkaitmenu] = {skaitmenų masyvas};
bool paimta[kiekSkaitmenu] = {visos reikšmės false};
int skaicius[kiekSkaitmenu];

generuoti(skaitmenys, paimta, skaicius, 0, kiekSkaitmenu)

 

Jeigu skaitmenys skaičiuje gali pasikartoti, tada reikia tikrinti, kad dukart tokių pačių skaičių nespausdintum.

 

Dėkui už tokį išsamų atsakymą, gal gali dar spausdinimo funkciją parašyti? :/

 

EDIT: bandau čia kažką, bet nelabai kas gaunasi..

 

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
void spausdinti(int sk[], int n) {
 int i;
 for (i=1;i<n;i++){
  printf("%d\n", sk[i]);}
}
void generuoti(int skaitmenys[], bool paimta[], int skaicius[], int gylis, int kiekSkaitmenu) {
if (gylis == kiekSkaitmenu) {
   	spausdinti(skaicius, kiekSkaitmenu);
} else {
   	for (int i = 0; i < kiekSkaitmenu; i++) {
       	if (!paimta[i]) {
           	paimta[i] = true;
           	skaicius[gylis] = skaitmenys[i];
           	generuoti(skaitmenys, paimta, skaicius, gylis + 1, kiekSkaitmenu);
           	paimta[i] = false;
       	}
   	}
}
}
int main ()
{
		 int sk, i, skaitmuo, mas[50];
		 printf("Enter number: \n");
		 scanf("%d", &sk);
		 i=0;
		 while (sk != 0)
		  {
	   	   skaitmuo=sk%10;
	   	   sk=sk/10;
	   	   i++;
	   	   mas[i]=skaitmuo;
     	}
    	printf("Number have %d symbols \n", i);
    	for (i;i>0;i--)
     	{
			   printf("%d\n", mas[i]);
     	}
    	int skaitmenys[kiekSkaitmenu] = {skaitmenø masyvas};
    	bool paimta[kiekSkaitmenu] = {visos reikðmës false};
    	int skaicius[kiekSkaitmenu];
    	generuoti(skaitmenys, paimta, skaicius, 0, kiekSkaitmenu)
    	system("pause");
    	return 0;
}

Redagavo unrixas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...