C dilinde Satır ve Sütunda Birbirini Tekrar Etmeyen Rakamlar

Shaii

Femtopat
Katılım
27 Temmuz 2021
Mesajlar
4
Daha fazla  
Cinsiyet
Erkek
[CODE lang="c" title="C 9x9"]#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
srand(time(NULL));

for (int satir= 0; satir < 9

; satir++){
for (int sutun = 0; sutun < 9; sutun++){
int rakamlar = rand() % 9;
if (rakamlar < 10){
printf(" %d", rakamlar);
} else if (rakamlar >= 9 && rakamlar <= 9){
printf(" %d", rakamlar);
}
}
printf("\n");
}
return 0;
}[/CODE[/CODE]
[CODE lang="c" title="C 9x9"]#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
srand(time(NULL));

for (int satir= 0; satir < 9

; satir++){
for (int sutun = 0; sutun < 9; sutun++){
int rakamlar = rand() % 9;
if (rakamlar < 10){
printf(" %d", rakamlar);
} else if (rakamlar >= 9 && rakamlar <= 9){
printf(" %d", rakamlar);
}
}
printf("\n");
}
return 0;
}[/CODE[/CODE]
Burada 9x9 rastgele sayılar üretebilyorum ama her satır ve sütunda bir rakam sadece bir kere tekrar etmesini istiyorum. Bildiğimiz doldurulmuş bir sudoku çıkartsın karşıma. Her başlattığımda farklı bir görüntü istiyorum. Ayrıca burada 0'da çıkıyor. 0'ın olmaması lazım. Yardımcı olabilirseniz çok sevinirim.
 
Son düzenleme:
Bunun için nereden başlamalıyım?
Ben diyeceğimi dedim. Bunun ilerisi adım adım söylemek.

Rastgele eleman eklemelide çakışma ne kadar sık oluyor diye kontrol ettiğimde o kadar çok oluyor ki 10-15 kere denememde bir kere olsun tamamı çakışmadan olmadı. En fazla 6 satır oldu.
 
Tek yapmak istediğim her sütun ve satırda 1'den 9'a kadar sayılar birer kez tekrar ederek 9x9' luk bir tablo oluşturmak. Her çaıştırdığımda farklı bir tablo oluşturmasını istiyorum.

Örnek olarak;

123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678

Sanırım sayıları rastgele sırayla kontrol ederek o satır ve sütunda olmayan sayıları yazacak bir mekanizma kurmam gerekli. Bunun için nereden başlamalıyım? Yardımlarınız için teşekkürler.

Buraya yazdigin matrisin satir ve sutunlarinin yerlerini degistir.
Ornegin 3. ve 5. satirdaki array'i swap edersen hala valid kalir.
Ayni sekilde column swap da bozmaz duzeni.
Bu sekilde randomize etmek bence daha kolay, muhtemelen daha da hizli.
 
Buraya yazdigin matrisin satir ve sutunlarinin yerlerini degistir.
Ornegin 3. ve 5. satirdaki array'i swap edersen hala valid kalir.
Ayni sekilde column swap da bozmaz duzeni.
Bu sekilde randomize etmek bence daha kolay, muhtemelen daha da hizli.
Ben diyeceğimi dedim. Bunun ilerisi adım adım söylemek.

Rastgele eleman eklemelide çakışma ne kadar sık oluyor diye kontrol ettiğimde o kadar çok oluyor ki 10-15 kere denememde bir kere olsun tamamı çakışmadan olmadı. En fazla 6 satır oldu.
[CODE lang="c" title="C"]#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int satirda_varmi(int dizi[9][9], int i, int sayi)
{
for (int j = 0; j < 9; j++)
if (dizi[j] == sayi)
return 1;

return 0;
}

void satiri_doldur(int dizi[9][9], int i)
{
for (int j = 0; j < 9; j++)
{
int rastgele = rand() % 9 + 1;

if (satirda_varmi(dizi, i, rastgele) == 0)
dizi[j] = rastgele;

else
j--;
}
}

void diziyi_doldur(int dizi[9][9])
{
for (int i = 0; i < 9; i++)
satiri_doldur(dizi, i);
}

void diziyi_yazdir(int dizi[9][9])
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
printf("%d ", dizi[j]);

printf("\n");
}
}

int main()
{
srand(time(0));
int sudoku[9][9];

diziyi_doldur(sudoku);
diziyi_yazdir(sudoku);

return 0;
}[/CODE]

Arkadaşlar bu şekilde yaptım. Satırlarda artık tekrar etmiyor. Sütun kısmında da baya uğraştım ama bazı yerlerde mesela;
12.....
23....
31...
45....
54....
67..
78...
86....
9[]

bu şekilde giderken parantez olan yere kadar güzel gidiyor ama parantezde tıkanıyor.
Bunu çözmeye yeticek C bilgisi yok bende :D Gerçi buraya kadar da yoktu ama... :D
Sütun kısmına da yarın öbürgün bakarım. Yardımlarınız için teşekkürler. Bir de dediklerinizin çoğunu anlayamadım çünkü o terimleri vb. bilmiyorum kusura bakmayın. Sütun kısmında görüşürüz umarım :3 Yardımcı olacak, bakmam gereken C konuları vb. söyleyebilirseniz çok makbule geçer. İyi geceler.
Buraya yazdigin matrisin satir ve sutunlarinin yerlerini degistir.
Ornegin 3. ve 5. satirdaki array'i swap edersen hala valid kalir.
Ayni sekilde column swap da bozmaz duzeni.
Bu sekilde randomize etmek bence daha kolay, muhtemelen daha da hizli.
Bu dediğiniz çok mantıklı şimdi anladım. Sanırım direk bunu alıp sadece sütunların yerlerini değiştiren bi kod yazsam sürekli rastgele istediğim şey gelmiş olur. Bunu da ayrı olarak yapabilirim. İşin kolayına kaçmak gibi oluyor :3 Şuankini tamamlamayı düşünüyorum. Çok teşekkürler.
 

Geri
Yukarı