Страница 1 из 1
Ребят,помогите найти ошибку в программе.
Добавлено: 11 ноя 2012, 01:10
Victorious
Помогите пожалуйста найти ошибку.Задача:определить ближайшее нечетное число меньше заданного числа N,которое делится на 4 с остатком 3.Программа работает,но получается не строго меньше N,как нужно по условию.
Код: Выделить всё
#include<stdio.h>
#include<conio.h>
void main()
{
int n,i,j;
printf ("vvedite n:");
scanf("%d",&n);
if (n%2)
{
n=n;
}
else
n--;
while((n-3)%4!=0);
n-=2:
printf("otvet %d\n",n);
getch();
}
Re: Ребят,помогите найти ошибку в программе.
Добавлено: 12 ноя 2012, 10:02
Albor
В цикле можно проверрять так : n%4!=3, второе - нет проверки на переход n в отрицательную область, ведь нужное нечётное число можно и не найти, третье - зачем лишняя операция n=n, если можно было просто проверить число на нечётность n%2!=0 или так n & 1.
Re: Ребят,помогите найти ошибку в программе.
Добавлено: 14 ноя 2012, 09:56
Albor
Не знаю, объявится ли здесь автор поста, но... задача интересна на мой взгляд. Решается она в одну строку кода. Если кому интересно, изложу решение:
1. условие немного вводит в заблуждение словами "ближайшее нечетное число", на самом деле, чётное число при делении на 4 ни когда не даст остаток 3, поэтому чётность можно и не проверять.
2. деление на 4 - это сдвиг числа вправо на 2 разряда, выпадающие разряды - это остаток от деления. Понятно, что остаток будет равен 3м при 2х единицах в младших разрядах числа;
3. Осталось найти ближайшее меньшее число с двумя младшими единицами. Для этого нужно уменьшить входное число на величину от 1 до 4 (4 - это если входное число само делится на 4 с остатком 3, но в условии сказано "ближайшее меньшее"). Определить, сколько нужно вычесть можно так: (n & 3)+1. n & 3 выделяет 2 младших разряда числа (от 0 до 3х в десятичной системе, а "+1" корректирует результат.
4. ИТОГО решение: результат= n - ((n &3)+1), где n - это входное число, которое не должно быть меньше 4.
То есть, ни каких циклов и всего одно условие.
Re: Ребят,помогите найти ошибку в программе.
Добавлено: 14 ноя 2012, 14:11
Victorious
Помогите.Не могу разобраться,почему программа не считает.Задача.дана символьная строка.заменить все четные символы "!" точками вывести полученную строку.
#include <stdio.h>
#include<conio.h>
#include<string.h
void main()
{
char str[10];
int i;
scanf("%s",str);
if(str='!"&&i%2==0);
for(i=0;i<strlen(str);i++)
{
if(str=='!')
str='.';
}
printf("poluchen stroka:",str);
getch();
}