Помогите с массивами

Тема в разделе "C/C++/C#", создана пользователем CppManiac, 30 июн 2010.

  1. CppManiac

    CppManiac Гость

    Помогите, подкинте идей как сие решать:
    1)-Все ли пары элементов линейного массива имеют только одну общую цифру в своей записи?
    2)-В каждом столбце матрицы найти наибольшую группу подряд идущих элементов, образующих арифметическую прогрессию?
    Идеи есть?
    по поводу 1) то я начинал ковырятся но безрезультатно и не до конца развил идею, идея была такова: создать новый массив в который занести все элементы массива таким образом если было число 154, то станет 1 5 4, но ерунда это

    Код (Text):
    #include <stdio.h>
    void main(){
    int kol=0;
    int c;
    const int n=20;
    int mas2[n];
    int mas[n]={12, 21, 70, 40, 5, 1, 33, 14, 41};
    for(int i = 0; mas[i]>=1; i++)
    {
    for(int k=0; k<kol; k++)
    {
    mas2[k]=mas[i]%10;
    mas[i]=mas[i]/10;
    }
    kol++; 
    }
    printf(\"\\n %d \",kol);
    kol--;
    //for(int k = 0; k<10; k++)
    //{
    //  /*if(mas[k]=mas[k+1])*/
    //}
    for(int k = 0; k<kol; k++)
    {
    printf(\"%2d\",mas2[k]);
    }
    }
     
  2. CppManiac

    CppManiac Гость

    Никто чтоли не знает...
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Напиши задание нормально... А то оно как то не полностью выглядит...
    Что дано, что сделать.
    А по первому, если ты конечно правельно понял, то решение вот такое..
    Код (C++):
    #include <iostream>
    #include <vector> //для векторов

    using namespace std;

    int main(void)
    {
    const int SizeM = 6;
    int Mass[SizeM] = {200,21,19,21,15,57};
    vector <int> Cifr[SizeM];

    //Заполняем вектора цифрами
    for (int i=0;i<6;i++)
    {
    int Mods = Mass[i];
    while (Mods>9)
    {
    Cifr[i].push_back(Mods%10);

    Mods /= 10;
    }
    Cifr[i].push_back(Mods);
    }


    //проверяем на вхождение соседних цифр
    //Начнем не с 0 а с 1. что бы можно было сравнивать соседнии [i] и [i-1]
    bool iResult = true; //Переменная результата, если true - ТОЛЬКО ОДНО СОВПАДЕНИЕ ЦИФР В СОСЕДНИХ ЭЛЕМЕНТАХ, иначе false
    int F_El =0; //Не обязательно (проблемный элемент в котором условие не соблюдается)
    for (int i=1;i<SizeM;i++)
    {
    int CoutEq = 0; //Количество совпадений , как я понял должно быть строго 1
    for (int j=0;j<Cifr[i].size();j++)
    {
    for (int k=0; k<Cifr[i-1].size(); k++)
    {
    if (Cifr[i][j] == Cifr[i-1][k]) CoutEq++;
    //cout<<Cifr[i][j]<<" ~ "<< Cifr[i-1][k]<<endl;
    }
    }
    if (CoutEq != 1) { iResult = false; F_El = i;}
    }

    if (iResult)
    {
    cout<<"That is Ok!";
    } else cout<<"False! Element : "<<F_El<<"and"<<F_El+1;


    return -1;
    }
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0

    Да, если поток памяти юзать, действительно намного красивее будет выглядить :) , ну а выигрыш в скорости будет но не значительный :) Влюбом случае не для такого объема данных.
    Вообщем реализация такая понравилась)

    А так да, если выкинуть С++ из виду то char* тут в самый раз,только контроль размерности кол-ва цифр нужно реализовывать, я вектора просто люблю и на вставку (очередь) им цены нет, да и размерность всегда видна :)

    Код (C++):
    //определение
    //char**
    char Cifr[SizeM] [12] ={0};
    ...
    int Mods = Mass[i];
    char Iter = 0;
    while (Mods>9)
    {
    Cifr[i][Iter]=Mods%10 + 48; //Храним не число а его код, что бы конец строки Cif[i] - можно было определить иначе цифра 0 - будет определять понец

    Mods /= 10;
    Iter++; //Инкремент счетчика
    }

    Cifr[i][Iter]=Mods+48;


    //Ну а проверка уже будет выглядить так
    for (int i=1;i<SizeM;i++)
    {
    int CoutEq = 0; //Количество совпадений , как я понял должно быть строго 1
    for (int j=0;j<strlen(Cifr[i]);j++)
    {
    for (int k=0; k<strlen(Cifr[i-1]); k++)
    {
    if (Cifr[i][j] == Cifr[i-1][k]) CoutEq++;
    //cout<<Cifr[i][j]<<" ~ "<< Cifr[i-1][k]<<endl;
    }
    }
     
Загрузка...

Поделиться этой страницей