Определим поездку через число, которое будет построено следующим образом: Посетите самую левую цифру числа. Эта цифра указывает вам, какую цифру следует посетить следующей: перемещайтесь вправо, при необходимости обертывая в левом конце номера, столько же мест, сколько значение цифры. Продолжайте этот процесс, пока какая-то цифра не будет посещена во второй раз. Если все цифры были посещены, число соответствует числу оберток. В противном случае это не так., чтобы определить номер обертывания
Например, рассмотрите номер 32741
. Мы посетим самую левую цифру, которая говорит нам, чтобы следующий раз посетил цифру три места справа, которая является 4
. Затем мы посетим 7
(который находится в четырех местах справа от 4
), затем 1
, затем 3
. Поездка вернулась к цифре во второй раз, не посетив все цифры. (2
никогда не посещался.) Таким образом, 32741
не является обертыванием числа. С другой стороны, 3233
- это обертка вокруг номера, так как мы сначала посетим крайний левый 3
, затем самый правый 3
, затем средний 3
, затем 2
, а затем вернемся в крайнее правое 3
. Все четыре цифры посещаются.
Напишите программу, которая принимает в качестве входных данных положительного числа и отчеты ли это или нет обертка вокруг числа.
Формат ввода:
Input consists of a single positive number.
Успенская
Assume that the input number is less than or equal to 400000000.
Формат вывода:
Refer sample output for formatting details.
Пример ввода 1:
872
Пример вывода 1:
872 is a wraparound number
Пример ввода 2:
351267813
Пример вывода 2:
351267813 is not a wraparound number.
Вот мой program..it показывает неправильный вывод для ввода образца 1 и rigt для ввода образца 2.
#include<stdio.h>
int main()
{
int a[9],number;
scanf("%d",&number);
int i;
for(i=0;i<9;i++)
{
a[i]=-1;
}
int temp=0,digit=0,index=0;
temp=number;
while(temp!=0)
{
digit=(temp%10);
a[index]=digit;
index=index+1;
temp=temp/10;
}
int size=0,checksize=-1;
i=0;
for(i=0;i<9;i++)
{
if(a[i]==-1)
{
size=i;
checksize=0;
break;
}
}
if(checksize==-1)
size=9;
int isAWrapAround=0;
int x=0,count=size-1,remaining=0,arraysize=size;
for(i=(arraysize-1);i>=0;i--)
{
x=a[count];
a[count]=-1;
if(x!=-1)
{
if(count-x>=0)
{
count=count-x;
}
else
{
remaining=x-count;
count=0;
do
{
if(remaining<=arraysize)
{
count=arraysize-remaining;
break;
}
else
{
count=remaining-arraysize;
remaining=remaining-arraysize;
}
}
while(count>arraysize-1);
}
}
else
{
isAWrapAround=-1;
}
}
if(isAWrapAround==0)
{
printf("%i is a wraparound number",number);
}
else
{
printf("%i is not a wraparound number",number);
}
return 0;
}
удалось выяснить ошибку.
Что вы узнали, когда вы перешли через программу в своем отладчике? – Sneftel
@sneftel не подтверждается для данного входного значения «872», но работает для «351267813» – 620d
Добро пожаловать в Stack Overflow! Пройдите [tour] (http://stackoverflow.com/tour) и прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы узнать, чего мы ожидаем от вопросов здесь. –