Помогите пожалуйста. У меня имеется массив из чисел от 0 до 1000.Как найти трехзначное число на паскале?
AntonioK
3,17920 серебряных знаков43 бронзовых знака
задан 17 апр 2014 в 7:44
- Делаем цикл по всему массиву чисел
- Проверяем внутри каждого цикла, оно трехзначное или нет.
Чтобы проверить оно трехзначное или нет, надо чтобы оно было от 100 до 999, т.е. проверить чтобы оно было больше и равно 100 и меньше и равно 999.
ответ дан 17 апр 2014 в 8:29
IVsevolodIVsevolod
6,7144 золотых знака26 серебряных знаков51 бронзовый знак
3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
|
1 |
|
Найти в символьном массиве трёхзначные числа15.06.2014, 17:32. Показов 4559. Ответов 17
Дали задание на практике. Кто-нибудь, хоть подайте идею, как это сделать. Заранее спасибо
0 |
150 / 137 / 35 Регистрация: 29.07.2012 Сообщений: 709 |
|
15.06.2014, 17:38 |
2 |
Строка в файле: ыва афы а 214 павыф п 234 аы875аф Действие 1: Разбейте строку на слова
0 |
cooller 571 / 539 / 280 Регистрация: 25.12.2013 Сообщений: 1,456 |
||||
15.06.2014, 17:39 |
3 |
|||
Монтгомери, вот метод, которой проверяет является ли число трехзначным
но перед этим разбейте строку на слова, и если слово является числом, проверяйте
0 |
2761 / 1915 / 569 Регистрация: 05.06.2014 Сообщений: 5,571 |
|
15.06.2014, 17:56 |
4 |
Монтгомери, вот метод, которой проверяет является ли число трехзначным bool check_number(int number){return number>=100&&number<=999;} Кто-нибудь, хоть подайте идею, как это сделать. Универсальный ответ на вопрос “как что-то найти и/или заменить в тексте” – регулярные выражения. Теперь и в стандартной библиотеке!
0 |
3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
|
15.06.2014, 18:11 [ТС] |
5 |
Т.е. только разбивать на слова? В если входной массив выглядит, к примеру, так: fasd224a54dasd5764s ? На этот случай есть варианты? Тогда следующий вопрос: как разделить строку на слова? Добавлено через 14 минут
0 |
cooller 571 / 539 / 280 Регистрация: 25.12.2013 Сообщений: 1,456 |
||||
15.06.2014, 18:16 |
6 |
|||
Монтгомери, вот пример, программа разбивает строку на слова
0 |
3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
|
15.06.2014, 18:21 [ТС] |
7 |
Эмм… А можете объяснить, как это работает?
0 |
2761 / 1915 / 569 Регистрация: 05.06.2014 Сообщений: 5,571 |
|
15.06.2014, 18:21 |
8 |
В если входной массив выглядит, к примеру, так: fasd224a54dasd5764s ? Найти все последовательности символов удовлетворяющие следующим условиям: Дальше сами справитесь? И выучите регулярные выражения. Тогда ответ выше будет очевиден.
0 |
3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
|
15.06.2014, 18:34 [ТС] |
9 |
Я впервые услышал о регулярных выражениях сейчас от вас. А типы char и string нам вообще дали в духе “есть такие вот зверушки”, но что с ними делать так и не сказали. И тут вдруг практика с заданиями, которые мы и не могли решить, используя прочитанный нам на лекциях материал. Так что я до сих пор не представляю, что надо делать дальше -_- Те три условия понятны, но как их реализовать я всё ещё не понимаю.
0 |
Croessmah Неэпический 17811 / 10583 / 2043 Регистрация: 27.09.2012 Сообщений: 26,622 Записей в блоге: 1 |
||||
15.06.2014, 18:41 |
10 |
|||
0 |
2761 / 1915 / 569 Регистрация: 05.06.2014 Сообщений: 5,571 |
|
15.06.2014, 18:45 |
11 |
Нам давали только массивы, циклы и функции. И работать я умею только с арифметичесими типами. char и есть арифметический тип со знаком. Символы идут в том же порядке как и в алфавите (‘a’+1==’b’). Проверка того что символ – цифра осуществляется предельно тупо – C>=’0’&&C<=’9′.
1 |
Монтгомери 3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
||||
15.06.2014, 19:26 [ТС] |
12 |
|||
А такой вариант будет работать?:
0 |
Renji 2761 / 1915 / 569 Регистрация: 05.06.2014 Сообщений: 5,571 |
||||||||
15.06.2014, 19:39 |
13 |
|||||||
Не
а
Плюс three-digit_numbers и snum использованы без инициализации. В остальном должно работать.
1 |
3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
|
15.06.2014, 21:17 [ТС] |
14 |
А, точно, совсем забыл про размерность массива. Спасибо.
0 |
2761 / 1915 / 569 Регистрация: 05.06.2014 Сообщений: 5,571 |
|
15.06.2014, 21:28 |
15 |
Постинкремент увеличивает значение переменной (одна ячейка памяти) и возвращает ее изначальное значение (вторая ячейка памяти). Преинкремент увеличивает переменную и возвращает ее новое значение (одна ячейка памяти). То есть, логически работает чуточку проще. После того как компилятор выполнит оптимизацию разницы скорее всего не будет никакой, так что замена выполнена чисто для психологического комфорта.
1 |
3 / 3 / 2 Регистрация: 10.09.2013 Сообщений: 210 |
|
15.06.2014, 22:05 [ТС] |
16 |
И снова благодарю
0 |
221 / 166 / 47 Регистрация: 17.07.2012 Сообщений: 587 |
|
16.06.2014, 09:21 |
17 |
for(;s[i]>=’0’&&s[i]<=’9’&&i<размер_массива;++i) кстати это же неверно по-моему!
0 |
2761 / 1915 / 569 Регистрация: 05.06.2014 Сообщений: 5,571 |
|
16.06.2014, 13:31 |
18 |
Да, действительно, косяк.
0 |
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given an array containing digits[], where each element is a single digit integer. The array may contain duplicates. The task is to find all the unique integers that follow the given requirements:
- The integer consists of the concatenation of three elements from digits in any arbitrary order.
- The integer does not have leading zeros.
Examples:
Input: digits[] = {2, 1, 3, 0}
Output: {102, 103, 120, 123, 130, 132, 201, 203, 210, 213, 230, 231, 301, 302, 310, 312, 320, 321}
Explanation: The above are the three digit numbers formed.Input: digits[] = {3, 7, 5}
Output: [357, 375, 537, 573, 735, 753 ]
Approach: This problem can be solved by using Frequency Map. Find count of all elements in given digits array. Follow the steps below to solve the given problem.
- Check for all numbers between 100 to 999 whether they can be formed by the digits present in the digits vector.
- Use 2 maps for the same. If the number can be made, then add it to the answer.
- In the end, return the answer.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using
namespace
std;
vector<
int
> find3DigitNumbers(vector<
int
>&
digits)
{
vector<
int
> count(10, 0);
for
(
auto
& d : digits)
count[d]++;
vector<
int
> res;
for
(
int
num = 100; num < 999; num++) {
vector<
int
> currCount(10, 0);
int
temp = num;
while
(temp) {
currCount[temp % 10]++;
temp /= 10;
}
bool
flag =
true
;
for
(
int
i = 0; i < 10; i++) {
if
(currCount[i] > count[i]) {
flag =
false
;
break
;
}
}
if
(flag) {
res.push_back(num);
}
}
return
res;
}
void
printAnswer(vector<
int
>& v1)
{
for
(
int
i = 0; i < v1.size(); i++) {
cout << v1[i] <<
" "
;
}
cout << endl;
}
int
main()
{
vector<
int
> v1 = { 2, 1, 3, 0 };
vector<
int
> ans = find3DigitNumbers(v1);
printAnswer(ans);
return
0;
}
Java
import
java.io.*;
import
java.lang.*;
import
java.util.*;
class
GFG {
static
void
find3DigitNumbers(
int
digits[], List<Integer> res)
{
int
count[] =
new
int
[
10
];;
for
(
int
i =
0
; i < digits.length; i++)
count[digits[i]]++;
for
(
int
num =
100
; num <
999
; num++) {
int
currCount[] =
new
int
[
10
];
int
temp = num;
while
(temp >
0
) {
currCount[temp %
10
]++;
temp /=
10
;
}
Boolean flag =
true
;
for
(
int
i =
0
; i <
10
; i++) {
if
(currCount[i] > count[i]) {
flag =
false
;
break
;
}
}
if
(flag ==
true
) {
res.add(num);
}
}
}
static
void
printAnswer(List<Integer> res)
{
for
(
int
i =
0
; i < res.size(); i++)
System.out.print(res.get(i) +
" "
);
}
public
static
void
main (String[] args)
{
int
arr[] = {
2
,
1
,
3
,
0
};
List<Integer> ans=
new
ArrayList<Integer>();
find3DigitNumbers(arr, ans);
printAnswer(ans);
}
}
Python3
def
find3DigitNumbers(digits):
count
=
[
0
]
*
10
for
d
in
digits:
count[d]
+
=
1
res
=
[]
for
num
in
range
(
100
,
999
):
currCount
=
[
0
]
*
10
temp
=
num
while
(temp):
currCount[temp
%
10
]
+
=
1
temp
=
temp
/
/
10
flag
=
True
for
i
in
range
(
10
):
if
(currCount[i] > count[i]):
flag
=
False
break
if
(flag):
res.append(num)
return
res
def
printAnswer(v1):
for
i
in
range
(
len
(v1)):
print
(v1[i], end
=
" "
)
print
('')
v1
=
[
2
,
1
,
3
,
0
]
ans
=
find3DigitNumbers(v1)
printAnswer(ans)
C#
using
System;
using
System.Collections;
class
GFG {
static
void
find3DigitNumbers(
int
[]digits, ArrayList res)
{
int
[]count =
new
int
[10];;
for
(
int
i = 0; i < digits.Length; i++)
count[digits[i]]++;
for
(
int
num = 100; num < 999; num++) {
int
[]currCount =
new
int
[10];
int
temp = num;
while
(temp > 0) {
currCount[temp % 10]++;
temp /= 10;
}
bool
flag =
true
;
for
(
int
i = 0; i < 10; i++) {
if
(currCount[i] > count[i]) {
flag =
false
;
break
;
}
}
if
(flag ==
true
) {
res.Add(num);
}
}
}
static
void
printAnswer(ArrayList res)
{
for
(
int
i = 0; i < res.Count; i++)
Console.Write(res[i] +
" "
);
}
public
static
void
Main ()
{
int
[]arr = { 2, 1, 3, 0 };
ArrayList ans=
new
ArrayList();
find3DigitNumbers(arr, ans);
printAnswer(ans);
}
}
Javascript
<script>
function
find3DigitNumbers(
digits) {
let count =
new
Array(10).fill(0);
for
(let d of digits)
count[d]++;
let res = [];
for
(let num = 100; num < 999; num++) {
let currCount =
new
Array(10).fill(0);
let temp = num;
while
(temp) {
currCount[temp % 10]++;
temp = Math.floor(temp / 10);
}
let flag =
true
;
for
(let i = 0; i < 10; i++) {
if
(currCount[i] > count[i]) {
flag =
false
;
break
;
}
}
if
(flag) {
res.push(num);
}
}
return
res;
}
function
printAnswer(v1) {
for
(let i = 0; i < v1.length; i++) {
document.write(v1[i] +
" "
);
}
document.write(
'<br>'
)
}
let v1 = [2, 1, 3, 0];
let ans = find3DigitNumbers(v1);
printAnswer(ans);
</script>
Output
102 103 120 123 130 132 201 203 210 213 230 231 301 302 310 312 320 321
Time Complexity: O(N)
Auxiliary Space: O(N)
Last Updated :
10 Aug, 2022
Like Article
Save Article
Привет. Программа компилируется, но не работает предполагаю, что возможно массив также генерируется не так, как должен.
Задается динамический массив из N элементов и заполняется случайными числами. Отсортировать и найти максимальное трехзначное число, сумма цифр которого равна введенному числу k. Числа в массиве от 0 до 100000.
#include <stdio.h> #include <stdlib.h> #include <malloc.h> //Функция по суммированию чисел int SumDigits ( int L ) { int d, sum = 0; while ( L != 0 ) { d = L % 10; sum = sum + d; L = L / 10; } return sum; } int main() { float *mass, tmp; float k, s, max, res=0; int i, j, N; printf("Zadayte chislo kn"); scanf("%lg",&k); printf("Zadayte kolichestvo elementov massivan"); scanf("%d", &N); mass = (float*)malloc(N*sizeof(float)); //резервируем память под массив for (i = 0; i< N; i++) { mass [i] = rand ()%100001; } //заполняем массив случайными числами от 0 до 100 000 //<-сортировка for(i=0;i<N;i++) { for(j=i;j<N;j++) { if(mass[i]>mass[j]) { tmp=mass[i]; mass[i]=mass[j]; mass[j]=tmp; } } } for(i=0;i<N;i++) { if((mass[i]>=100 || mass[i]<=999) && SumDigits(mass[i])==k) { res++; // //res - переменная, в которой запоминаем было ли вообще число, подходящее под условие max=mass[i]; // //запоминаем последнее число } } printf("Your result is %d", max); printf("Vsego ih bilo %d", res); getch(); free(mass); return 0; }
Поиск трёхзначных чисел в массиве чисел
Автор вопроса: ЕкатеринаКораблева
Помогите пожалуйста. У меня имеется массив из чисел от 0 до 1000.Как найти трехзначное число на паскале?
Источник
Ответы (1 шт):
Автор решения: IVsevolod
- Делаем цикл по всему массиву чисел
- Проверяем внутри каждого цикла, оно трехзначное или нет.
Чтобы проверить оно трехзначное или нет, надо чтобы оно было от 100 до 999, т.е. проверить чтобы оно было больше и равно 100 и меньше и равно 999.
→ Ссылка