Jump to content

Andreigl

VIP
  • Posts

    1958
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Andreigl

  1. https://www.pbinfo.ro/solutii/user/neauzitul/problema/3272/sumdivogl Method 1 by @Vesca: #include <algorithm> #include <iostream> #include <string> int main() { int N; std::cin >> N; long long int sum = 0; int current_num; while (std::cin >> current_num) { std::string str_num = std::to_string(current_num); std::reverse(str_num.begin(), str_num.end()); current_num = std::stoi(str_num); int div; for (div = 1; div * div < current_num; ++div) { sum += (div + current_num / div) * (current_num % div == 0); } sum += div * (div * div == current_num); } std::cout << sum << "\n"; return 0; } Method 2: #include <iostream> int Oglindit(int Numar) { int Oglindit = 0; while (Numar) { Oglindit = Numar % 10 + Oglindit * 10; Numar /= 10; } return Oglindit; } long long int Divizori(int Numar) { long long int Suma = 0; for (int i = 1; i * i <= Numar; i++) { if (Numar % i == 0) { Suma += i; if (i * i < Numar) Suma += Numar / i; } } return Suma; } int main() { int N, Numar; long long int Suma = 0; std::cin >> N; for (; N > 0; N--) { std::cin >> Numar; Suma += Divizori(Oglindit(Numar)); } std::cout << Suma; }
  2. https://www.pbinfo.ro/probleme/3270/suma-divizorilor-pari #include <iostream> int main() { int N; std::cin >> N; long long int Suma = 0; for (int i = 1; i * i <= N; i++) { if (N % i == 0) { if(!(i & 1)) Suma += i; if (i * i < N && !(N/i & 1)) Suma += N / i; } } std::cout << Suma; return 0; }
  3. Fără hate, dar mie mi s-a părut amuzant @V86ulpea faci puncte datorită mie
  4. @TheTom CLEO te limitează până la 31 de variaible, ultimele 2 fiind timere (cresc cu 1 de fiecare dată când codul reia loop-ul principal). Deci ai 2 variante, ori înveți să folosești 0AB1: call_scm_func @GetSQR 1 10 $result ori folosești funcțiile de mai jos: :SET 0AC6: 3@ = get_label_pointer @MEMORY int 1@ *= 4 int 3@ += 1@ 0A8C: write_memory 3@ size 2@ value 0@ virtual_protect 0 ret 0 :GET 0AC6: 3@ = get_label_pointer @MEMORY int 0@ *= 4 int 3@ += 0@ 0A8D: 2@ = read_memory 3@ size 1@ virtual_protect 0 ret 1 2@ :Memory hex 00 00 00 00 // variabila 1 00 00 00 00 // variabila 2 00 00 00 00 // variabila 3 // ... 00 00 00 00 // variabila n end Pentru a salva o variabilă se folosește funcția SET în felul următor: 0AB1: @SET 3 passed_value 1@ var_number 2@ var_size 4 unde 1@ reprezintă valoarea trimisă, iar 2@ numărul variabilei. Pentru a lua o variabilă salvată în Memory, se folosește funcția GET în felul următor: 0AB1: @GET 2 var_number 1@ var_size 4 receiver 2@ unde 1@ reprezintă numărul variabilei care vrem să-i aflăm valoarea, iar 2@ variabila unde valoarea variabilei 1@ o să fie stocată. Exemplu de script cu aceste funcții aveți mai jos: {$CLEO} repeat wait 0 until 0AFA: goto @Main :SET 0AC6: 3@ = get_label_pointer @MEMORY int 1@ *= 4 int 3@ += 1@ 0A8C: write_memory 3@ size 2@ value 0@ virtual_protect 0 ret 0 :GET 0AC6: 3@ = get_label_pointer @MEMORY int 0@ *= 4 int 3@ += 0@ 0A8D: 2@ = read_memory 3@ size 1@ virtual_protect 0 ret 1 2@ :Memory hex 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 end :Main 0C6A: 1@ = create_custom_thread_at_label @While_2 while true wait 0 if 33@ > 5000 then 0AB1: @SET 3 passed_value 1 var_number 1 var_size 4 end end :While_2 while true wait 0 0AB1: @GET 2 var_number 1 var_size 4 receiver 0@ if 0@ <> 0 then chatmsg "Yes" -1 end end Se observă că am trimis un parametru dintr-un thread într-un alt thread, ceea ce cu variabilele locale este imposibil.
  5. Version 2.0.0

    422 downloads

    Cu ajutorul acestui mod puteți să folosiți două joburi (cel primar și secundar) în același timp, fără să mai utilizați comanda /switchjob. Modul este unul legal deoarece este un binder automat. De asemenea, adminii au loguri pentru comenzi. Mulțumiri @Anette pentru idee ? El funcționează în felul următor: atunci când folosiți o comandă de la un job inactiv (adică trebuie să dați /switchjob pentru a putea folosii comenzile jobului respectiv), în chat o să primiți un mesaj de la server cum că nu sunteți „...” (aici vi se specifică jobul). Modul dacă este pornit, scanează când primiți acest mesaj și automat o să folosească comanda /switchjob, urmând să retrimită parametrii scriși de voi. De exemplu: Jobul meu curent este Mechanic și celălalt este Detectiv. Eu scriu /find 143, modul automat va da /switchjob și va retrimite parametrii scriși de către voi, și anume /find 143. Dezavantaje: nu funcționează și pentru comanda /work. A fost conceput să meargă doar atunci când folosiți o comanda unică pentru jobul respectiv. Exemple de comenzi unice: /selldrugs, /sellgun, /fish, /creategun, /free, /find etc. Instalare: Fișierul „.cs” se adaugă în folderul CLEO din GTA San Andreas. Modul este dependent de SAMPFUNCS. Comenzi: /two_jobs (atât pentru pornire, cât și pentru oprire se folosește aceeași comandă). Modul funcționează în ambele limbi. Am decis să nu blochez mesajele inutile: You are not „...” / Nu sunteti „...” sau mesajele primite când modul trimite comanda /switchjob. Câteva demonstrații:
  6. Știu că este, motiv pentru care nici n-am postat un mod de genul în secțiunea de moduri.
  7. High Code: for 0@ = 0 to 999 step 1 if SAMP.IsPlayerConnected(1@) then // some code end end Low Code: 0@ = 0 :Noname_7 if SAMP.IsPlayerConnected(1@) jf @Noname_23 :Noname_23 0@ += 1 0@ > 999 jf @Noname_7 Pentru ce este de folos? Ei bine, voi știți, dar vă spun ce-mi trece prin cap acum: Crearea unui mod ce vinde / oferă arme / repair / refill tuturor jucătorilor de lângă tine Crearea unui mod ce dă find pe un jucător online (detective help job skill up sau ceva de genul) Pentru prima variantă, o să trebuiască să verificăm dacă jucătorul este în stream zone (luăm handle-ul), după verificăm distanța dintre cele 2 caractere (eu și el). Exemplu: for 0@ = 0 to 999 step 1 if SAMP.IsPlayerConnected(0@) then 1@ = SAMP.GetActorHandleByPlayerID(0@) if 056D: actor 1@ defined then Actor.StorePos(1@, 2@, 3@, 4@) Actor.StorePos($PLAYER_ACTOR, 5@, 6@, 7@) 050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@ if not 8@ >= 15.0 // feet then // some code end end end end
  8. @Vesca, if (Ultima_Cifra & 1) { ... } Explică și de ce
  9. Câteva probleme (click pe ele pentru a accesa link-ul către problemă). 1. Suma cifrelor unui număr #include <iostream> int main() { long long int Numar; // Numerele sunt cuprinse intre 1 si 2.000.000.000 int Suma = 0; // Valoarea cea mai mare a acestei variabile ar putea fi 82 (atunci cand avem numarul 1 999 999 999) std::cin >> Numar; while (Numar != 0) { Suma += Numar % 10; Numar /= 10; } std::cout << Suma; } 2. Produsul cifrelor impare ale unui număr #include <iostream> int main() { long long int Numar; std::cin >> Numar; int Produs = 1; // Il egalam cu 1 si nu cu 0 deoarece orice numar inmultit cu 0 ... este clar 0 while (Numar != 0) { int Ultima_Cifra = Numar % 10; if (Ultima_Cifra % 2 != 0) Produs *= Ultima_Cifra; Numar /= 10; } std::cout << Produs; }
  10. Determinarea cifrelor unui număr Să ne gândim la un număr (natural), n = 274 – aici n este o variabilă de tip int. Care dintre cifrele sale poate fi determinată cu o simplă operație aritmetică? Constatăm că putem determina ultima cifră a numărului cu operația C++ % 10 – restul împărțirii la 10. Într-adevăr, 274 % 10 este 4, adică ultima cifră (a unităților) a lui 274. Cum putem determina cifra zecilor? Sigur, o soluție ar fi n % 100 / 10. Într-adevăr, n % 100 este 74, iar 74 /10 este 7. Ne amintim că, dacă operanzii sunt întregi, operația / reprezintă câtul împărțirii întregi. Știm că n % 10 reprezintă cifra unităților lui n și vrem să determinăm cifra zecilor. Putem să modificăm mai întâi valoarea lui n, astfel: n = n / 10, și să determinăm ultima cifră a acestui număr. Este cifra unităților pentru valoarea curentă a lui n și cifra zecilor pentru valoarea inițială. int n = 274; cout << n % 10; // se va afisa 4 n = n / 10; // n devine 27 cout << n % 10; // se va afisa 7 Vom numi trunchiere operația prin care se elimină ultima cifră a valorii unei variabile întregi. Pentru a realiza trunchierea, folosim operația de atribuire și împărțirea la 10: n = n / 10 sau n /= 10. Cum aflăm cifra sutelor? Trunchiem încă o dată valoarea lui n. n devine 2, iar n % 10 este 2, adică cifra sutelor pentru valoarea inițială a lui n. Mai mult, acum n are o singură cifră, și printr-o nouă trunchiere devine 0. Să tragem câteva concluzii: ultima cifră a lui n este n % 10; prin trunchiere se elimină ultima cifră a lui n; ultima cifră a valorii curente este cifra zecilor a valorii inițiale; prin trunchieri succesive valoarea lui n devine 0. Numărul de trunchieri este în concordanță cu numărul de cifre din valoarea inițială a lui n. Astfel, se conturează următorul program pentru determinarea cifrelor unui număr: #include <iostream> int main() { int N; std::cin >> N; while (N != 0) { int Ultima_Cifra = N % 10; std::cout << Ultima_Cifra << " "; N /= 10; // sau N = N / 10; } return 0; } Dacă dorim să salvăm cifrele numărului într-un vector, avem varianta următoare: #include <iostream> int main() { int N; std::cin >> N; int array[20], i = 0; while (N != 0) { array[i++] = N % 10; N /= 10; } for (; i > 0; i--) std::cout << array[i-1] << " "; } Am pus array[i-1] pentru că atunci când aflăm ultima cifră (adica atunci când numărul N este între 1 și 9), programul o salvează în vector, urmând să crească variabila i cu 1 și vectorul rămâne nul. Recomand citirea tutorialelor: Palindromul / Oglinditul unui număr Matematica din spatele funcției Modulo Vezi tutorialul original aici.
  11. @Vesca , eu ți-am zis cum mi se pare mie mai „logic”, totuși varianta ta ar fi bună pentru un apel lambda std::sort(array, array + size, [](int a, int b) { return a > b; } ); Am adăugat acest topic în algoritmi elementari.
  12. Nu mai fă prescurtări, în loc de bool criteriu_descrescator(int a, int b) { return a > b; } puteai pune: bool criteriu_descrescator(int a, int b) { if (a > b) return 1; else return 0; } E mai clar ce face funcția asa, zic eu Motivul pentru care eu nu folosesc vectorii este că atunci când ai nevoie de un vector bidimensional, lucrurile se complică ... deci rămân la array ? Ia, populează-mi o matrice cu vectori, după faci suma elementelor pe diagonală, de la primul pănâ la ultimul element, ca și în poza de mai jos:
  13. @Vesca, poți să faci exemple și cu Array? Dar nu folosind std, sau, și și
  14. The title of the topic must contain the programming language in square brackets (example: [C++] Hello World). Do not post an existing tutorial. If your algorithm is more efficient than the one already posted, you can post it and also put the old tutorial link in the post (we will decide which one remains, or there will be cases when both topics will be approved). Your algorithm must be included in [\code] your content [/code]. Also, be careful when placing on the page and use the `Preview` function before posting the topic. Don't Copy Paste. Don't just post the source of your code. In this section we post tutorials, not creations. Here you have to explain what you have done so that each member reading your topic understands your algorithm / snippet. Topics that don't comply the rules will be closed and you will be notified of the reason for closing the topic. Within 3 days of closing the topic, they will be moved to Trash Can to keep the section clean. Topics that have not been posted for more than 3 days will be closed. If the code or tutorial is not entirely yours, or you have inspired yourself from somewhere, it is advisable to put the original source / link.
  15. @Vesca, Cum am zis mai sus, pentru un începător, cel mai bine ar fi să fie totul făcut manual, nu funcții interne ? std::string reverse(std::string myString) { int j = 0; for (int i = myString.length() - 1; i > j; i--) { char aux = myString[i]; myString[i] = myString[j]; myString[j] = aux; j++; } return myString; }
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.