Задания
Версия для печати и копирования в MS Word
Тип 9 № 64894
i

От­крой­те файл элек­трон­ной таб­ли­цы, со­дер­жа­щей в каж­дой стро­ке шесть на­ту­раль­ных чисел.

Назовём ячей­ку таб­ли­цы ин­те­рес­ной, если вы­пол­ня­ют­ся сле­ду­ю­щие усло­вия:

—  число в дан­ной ячей­ке боль­ше не встре­ча­ет­ся в дан­ной стро­ке;

—  число в дан­ной ячей­ке встре­ча­ет­ся в дан­ном столб­це, вклю­чая дан­ную ячей­ку, боль­ше 150 раз.

Опре­де­ли­те ко­ли­че­ство строк таб­ли­цы, со­дер­жа­щих не менее 5 ин­те­рес­ных ячеек.

За­да­ние 9

Спрятать решение

Ре­ше­ние.

Для на­ча­ла най­дем сколь­ко раз числа по­вто­ря­ют­ся в стро­ке. Для этого в ячей­ку G1 вве­дем фор­му­лу:

=СЧЁТЕСЛИ($A1:$F1;A1)

и ско­пи­ру­ем ее на диа­па­зон G1:L16000.

Най­дем, сколь­ко раз числа по­вто­ря­ют­ся в столб­це. Для этого в ячей­ку M1 вве­дем фор­му­лу:

=СЧЁТЕСЛИ(A$1:A$16000;A1)

и ско­пи­ру­ем ее на диа­па­зон M1:R16000.

Про­ве­рим каж­дую ячей­ку и узна­ем, ин­те­рес­ная она или нет. Для этого в ячей­ку S1 вве­дем фор­му­лу:

=ЕСЛИ(И(G1=1;M1>150);1;0)

и ско­пи­ру­ем ее на диа­па­зон S1:X16000.

По­счи­та­ем ко­ли­че­ство ин­те­рес­ных ячеек в стро­ке и узна­ем, удо­вле­тво­ря­ет ли усло­вию стро­ка. Для этого в ячей­ку Y1 вве­дем фор­му­лу:

=ЕСЛИ(СУММ(S1:X1)>4;1;0)

и ско­пи­ру­ем ее на диа­па­зон Y1:Y16000.

Окон­ча­тель­но на­хо­дим ко­ли­че­ство ис­ко­мых строк. Для этого за­пи­сы­ва­ем сле­ду­ю­щее:

=СУММ(Y1:Y16000)

и по­лу­ча­ем ответ 9527.

 

Ответ: 9527.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

f = open('09.csv')

k = 0

arow = [[int(x) for x in s.split(';')] for s in f]

acol = [[arow[i][j] for i in range(len(arow))] for j in range(6)]

for i in range(len(arow)):

kint = 0

for j in range(6):

x = arow[i][j]

if arow[i].count(x) == 1 and acol[j].count(x) > 150:

kint += 1

if kint >= 5:

k += 1

print(k)

 

При­ведём дру­гое ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

lines = [list(map(int,s.split(';'))) for s in open('09.csv')]

d={}

for line in lines:

for i in range(6):

if line[i] not in d:

d[line[i]]=[0]*6

d[line[i]][i] += 1

goodlines = [line for line in lines if sum([line.count(line[i])==1 and d[line[i]][i] > 150 for i in range(6)]) >= 5]

print(len(goodlines))

 

При­ме­ча­ние. Файл сле­ду­ет со­хра­нить в фор­ма­те CSV.


Аналоги к заданию № 64894: 64939 Все