Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уравнивание чисел, перераспределение символов 
:(
    Опции темы
Ufyljy
  Дата 8.12.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Задача для меня непростая. Сейчас убил несколько часов. К сожалению результаты плохие.
Собственно говоря, вопроса 2 (делать разрыв двух вопросов по темам бессмысленно)
1) Я присваиваю символьному массиву ASCII-код (сердечки, пики, буби...), а выводится <null>
2) Основной. Все поступающие rand()-числа распределяются по 4 диапазонам,
каждый диапазон отражает символ (например, от >= 0 до <= 24 - это 'с' и.т.д.)
От каждого числа получая значок, выводится табличка с этими значками, но количество
всех типов значков должно быть ограничено цифрой 9. Поэтому их следует уравнять.
А после уравнения и вывести таблицу. Как вы догадались - это дело связано с картами.
(4 масти по 9 карт)
      
Нахождение среднего арифметического для уравнивания не прокатит smile
      
Все-таки здесь перетусовка карт и чем меньше порядка и закономерностей будет в колоде,
тем лучше. 

Если в лом писать программу, подскажите алгоритм для 2-ого вопроса

Благодарности: wils0n, DjoNIK, FREEDEV, Kuvaldis, Lazin, Optimus =2, SergeCpp, archimed7592 =5, FiMa1 =2, zkv =2, bsa, Ln78, Dov =2


Код

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>

#define br putchar('\n');
main()
{
      // Подключение random
      srand((unsigned)time(NULL));
      
      int a[36]; char b[36];
      int c=0,d=0,e=0,f=0,g=0,h=0,i=0,n=0,t=0,x;
      int s1=0,s2=0,s3=0,s4=0; // независимые счетчики

      for(i=0; i<36; i++)
      {
                if(i >= 6){t=1;}
                if((i%6)==0 && t==1){br;} 
                a[i]=rand()/330;
                printf("%d  ",a[i]);
                
                if(a[i] >= 0 && a[i] <= 24){b[i]='c'; s1+=1;}
                if(a[i] >= 50 && a[i] <= 74){b[i]='t'; s2+=1;}
                if(a[i] >= 25 && a[i] <= 49){b[i]='p'; s3+=1;}
                if(a[i] >= 75){b[i]='b'; s4+=1;}
       }
       
       br; br;
       for(i=0; i<36; i++)
       {
                if(i >= 6){n=1;}
                if((i%6)==0 && n==1){br;} 
                printf("%c ", b[i]);
       }
       br; br;
       printf("c:%d t:%d p:%d b:%d",s1,s2,s3,s4);
       br;
       int v[4]; v[0]=s1; v[1]=s2; v[2]=s3; v[3]=s4;
       int w[4];
      
      int max=v[0],min=v[0];
      br;
      
      /*
      for(i=0; i<4; i++)
      {
               if(v[i] > max){max=v[i]; g=i;}
               if(v[i] >= 10){w[g]=v[i]; d=v[i]-9; printf("%d element > na %d\n",i+1,d); f+=d;}     
               if(v[i] < 9){d=9-v[i]; printf("%d element < na %d\n",i+1,d);} 
      }
      
      printf("max %d, otn %d",max,f);   
      br; br;
      
      
      for(i=0; i<4; i++)
      {
       if(v[i] < 9){v[i]=v[i]+1; v[g]-=1;}
      }

      for(i=0; i<4; i++)
      {
               printf("%d ",v[i]);
      }
      
      br;
      */
getch();
}

PM MAIL   Вверх
Loony
Дата 9.12.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



В книге "Как программировать на с++", авторы Харви и Пол Дейтел, в главе 5 разделе 10 подробно описан алгоритм тасования карт. К сожалению текст привести не могу, книги нет, просто вспомнил, что видел пример и нашел в нете содержание. Книгу нетрудно найти в электронном виде!
PM MAIL   Вверх
baldina
Дата 9.12.2007, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Когда-то пришлось тасовать карты, а Харви не было под рукой. Это была студенческая поделка, качества не требовалось. Было там что-то вроде:

Код

  // 5 раз перемешиваем колоду, меняя карты в случайном порядке
  for (int j=0; j < 5; ++j)
    for (int i=0; i < 36; ++i)
       swap (card[i], card[rand()%36]);


Т.е. идея восходила к ручному тасованию. Результат кстати был довольно приличным.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.