Другие языки программирования и технологии

C# Дан массив Х из 50 целых чисел.

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1 {
static class Program {
public static void Main() {
var values = GetValues(50, 100);

foreach (var value in values) {
Console.WriteLine(
"Value: {0}\tBinary: {1}\tIsPowerOf2(): {2}",
value,
Convert.ToString(value, 2),
IsPowerOf2(value)
);
}

Console.WriteLine();

var result = Count2(values);
Console.WriteLine("Result: {0}", result);
}

static bool Count2(IEnumerable<int> values) {
return values.Count(IsPowerOf2) > 1;
}

static bool IsPowerOf2(int value) {
if (value <= 0) {
return false;
}

return (value & (value - 1)) == 0;
}

static int[] GetValues(int count, int max_value) {
var result = new int[count];

var random = new Random();
for (var i = 0; i < count; i++) {
result[i] = random.Next(max_value);
}

return result;
}
}
}

Сергей Доможиров
Сергей Доможиров
9 617
Лучший ответ
А ХЗ
Хочешь напишу снуля не бесплатно. В чужлм коде разбираться нет желания.
Aleksandr .
Aleksandr .
52 176
Считать количество битов через логарифм - редкое извращение.
Замените эту хрень с логарифмом на что-то типо
int bcount = 0;
for( i2 = i; i2 > 0; i2 /= 2 )
if ((i2 % 2) == 1) bcount++;
if (bcount == 1) count++;
ну кто так условие пишет? ппц, числа от 1-50? и где тут массив?
в студии создай приложение по шаблону ConsoleApplication
и скопипасти туда это:
using System;

class Program
{
public static bool Count2(int[] x)
{
int count = 0;
string x2;
for (int i = 0; i < x.Length; i++)
{
x2 = Math.Log(x, 2).ToString();
/*помещая х2 в string если его дробная часть = 0, тогда туда поместится только целая часть. допустим результат=2.0, в строку запишется только двойка*/
/*у тебя неправильное сравнение было, кратность двум там непричём, надо смотреть есть ли дробная //часть, и если нет соответственно число является степенью двойки */
if (!x2.Contains(",") && !x2.Contains("."))/*проверяю на точку и запятую на случай разных региональных настроек/*
count++;
if (count >= 2)
return true;
}
return false;
}

static void Main()
{
int[] array = new int[50];
Random random = new Random();
for (int i = 0; i < array.Length; i++)
array = random.Next(100);

if(Count2(array))
Console.WriteLine("содержит 2 или больше элемента которые являются степенями двойки");
else
Console.WriteLine("не содержит 2 или больше элемента которые являются степенями двойки");

Console.ReadKey();
}
}
Игорь Ремизов
Игорь Ремизов
1 816

Похожие вопросы