PDA

View Full Version : سوال: الگوریتم چاپ اعداد بدون تکرار ارقام( 9 رقمی با ارقام 1تا 9 )



m-horizon
سه شنبه 12 دی 1391, 11:26 صبح
سلام
یک الگوریتم برای چاپ اعداد 9 رقمی با ارقام 1تا 9 بدون تکرار ارقام میخواستم
با تشکر

spiderman200700
سه شنبه 12 دی 1391, 15:57 عصر
سلام
بدون تکرار ارقام دقیقا یعنی چی؟

m-horizon
چهارشنبه 13 دی 1391, 09:35 صبح
یعنی دقیقا از هر رقم یکی باشد و مثلا در این عدد دو تا نه نباشد
مثال صحیح:123456789
مثال نادرست:123456799


سلام
بدون تکرار ارقام دقیقا یعنی چی؟

spiderman200700
چهارشنبه 13 دی 1391, 19:56 عصر
اگه فقط قراره چاپ بشه، باید یه عدد بین 1 تا 9 رو به صورت تصادفی ایجاد کنی چک کنی ببینی اگه این عدد قبلا چاپ نشده در خروجی چاپش کنی. بدیهیه که هر عدد بعد از چاپ شدن در یه آرایه یا چیزی شبیه به این ذخیره میشه تا بعدا برای مقایسه ازش استفاده بشه.

vahid-p
چهارشنبه 13 دی 1391, 21:26 عصر
من قبلا این برنامه رو نوشتم ، فکر کنم اونیه که شما میخواید . ( جالبه ها، این برنامه رو چند روز پیش برای تنوع نوشتم -در اصل یه سوال برای خودم طرح کردم که دنبال روابط ریاضی تعداد ارقام بودیم که در اخر بدست آوردیم و با مقدار این برنامه یکی شد- که ایدش که همین اصل برنامشه نه رابطه ریاضیش، یکی از کوییز های مبانی برنامه سازی بچه های کامپیوتر دانشگاه شیراز این ترم بود )

با سی پلاس پلاس نوشتم : ( فقط توجه کنید اون قسمتی که کامپایل نمیشه برای اینه که صفر هم مثل بقیه اعداد در نظر بگیریم. اگر بخوایم صفر هر تعدادی که میخواد تکرار بشه و برامون مهم نباشه، مثل همین سوالی که شما گفتین خب بعد //check zero علامت های /* و */ وردارین تا دقیقا چیزی که میخواید بشه. چون گفته یک تا نه تکرار نشن، نگفته که صفر تکرار نشه! ) - الگوریتمش رو بگیرین و به هر زبانی که میخواید بنویسید. زمان اجراش حدودا یک دقیقه طول میکشه.
اگر صفر مثل بقیه اعداد باشه و تکرار نشه تعدادش میشه 9*9! و اگر تکرار صفر مهم نباشه چیزی میشهتو مایه های

9!+9*sigma((8!...)
تعدادش میشه : 12975561
که برنامه هم همین عدد رو برمیگردونه.

#include <iostream>
#include <conio.h>

using namespace std;

bool fun(int x)
{
int a[9],i=0,j=0;
while(x>0)
{
a[i]=x%10;
x=x/10;
i++;
}
// check zero
/*for(i=0;i<9;i++)
{
if(a[i]==0)
{
return false;
}
}*/
while(j<9)
{
for(i=j+1;i<9;i++)
{
if(a[j]==a[i] && a[i]!=0)
{
return false;
}
}
j++;
}
return true;
}
int main()
{
int i,j=0;
for(i=100000000;i<1000000000;i++)
{
if(fun(i))
{
cout <<i<<"\t";
j++;
}
}
cout <<endl<<"Num = "<<j;
getch();
return 0;
}

موفق باشید

سپینود
دوشنبه 28 اردیبهشت 1394, 07:15 صبح
متاسفم که کسی پاسخگو نیست

ahmad.mo74
دوشنبه 28 اردیبهشت 1394, 10:33 صبح
سلام، این تاپیک برای 3 سال پیشه ها!!!!!


static final int USED_DIGITS[] = new int[10];


public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (!hasDuplicateDigits(i)) {
System.out.println(i);
}
}
}


static boolean hasDuplicateDigits(int n) {
Arrays.fill(USED_DIGITS, 0);
n = Math.abs(n);
while (n != 0) {
if (USED_DIGITS[n % 10] == 1) {
return true;
}
USED_DIGITS[n % 10] = 1;
n /= 10;
}
return false;
}