Сайт підготовки до олімпіади з інформатики

програмування в С++

Заняття 21.10.2015 PDF Печать E-mail
Добавил(а) Administrator   
15.01.16 21:06

1 тур Волинської учнівської оілмпіади з програмування
Задача 1. Число з однакових цифр
Нехай в калькулятор введемо деяке натуральне число N. Натиснемо клавішу +. Ваше завдання: отримати на екрані число яке складається з однакових цифр. Для цього можна виконувати тільки одну дію: натискувати клавішу = (можливо і 0 раз). Після першого натискування отримаємо результат N+N, після наступного натискування результат збільшується на N. Потрібно визначити, чи можна виконати це завдання. Якщо можна, то визначити перше число яке складається з однакових цифр. Кількість цифр які може відображати калькулятор вважати необмеженою.


#include "fstream"
using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");

int main()
{long long n,i,b,c,k,j,t;
cin>>n;
long long f=0,s=0;
int x[1000];
while(f==0 && s<=10000000){
s=s+n;
t=s;i=0;
while(t>0){
i++;
x[i]=t%10;
t=t/10;
}
b=0;
//for(j=1; j<=i; j++)cout<<x[j]<<" ";cout<<endl;
for(j=1; j<i; j++){
if(x[j]!=x[j+1])b=1;
}
if(b==0){
f=1;
c=x[1]; k=i;}

}
if (f==1) cout<<c<<" "<<k<<endl;
else cout<<"Impossible"<<endl;
return 0;
} #include <fstream>
using namespace std;
int main()
{
ifstream cin("input.txt");
ofstream cout("output.txt");
unsigned long long s,n,temp;
long i1,c1,c2,k; int f=0;
cin>>n;
s=n;
do
{f=0;
temp=s;
c2=temp%10;
k=0;
while (temp>0 && f==0)
{c1=temp%10;
k++;
//cout<<c1<<" "<<k<<endl;
if(c1!=c2)f=1;
temp=temp/10;
c2=c1;
}
if (f==0) f=2;
s=s+n;
}
while (f!=2 && s<1000000000);
if (f==2) cout<<c1<<" "<<k<<endl;
else cout<< "Impossible"<<endl;
return 0;
}
#include <fstream>
#include <math.h>
using namespace std;
int main()
{
ifstream cin("input.txt");
ofstream cout("output.txt");

unsigned long long s[10],n,temp;
long i,c,k;
int f=0;
cin>>n;
k=0;
for (i=1;i<=9;i++)s[i]=0;
while (f==0 && s[9]<17446744073709551615)
{

for (i=1;i<=9;i++)
{
s[i]=s[i]*10+i;
if (s[i]%n==0){f=1;c=i;break;}
// cout<<s[i]<<"------------"<<i<<"---"<<k<<endl;
}
k++;
}
if (f==1) cout<<c<<" "<<k<<endl;
else cout<< "Impossible"<<endl;
return 0;
} #include "fstream"
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
int a[10][2001], f, n, i,k, x, y, j,st;
int main()
{
cin>>n;
f=0,i=0;
while(f==0 && i<=1000)
{
i++;
for(j=1; j<=9; j++)
{ a[j][i]=j;
st=0;
for(k=1;k<=i;k++)st=(st*10+a[j][k])%n;
if(st==0){x=a[j][1]; y=i;f=1;break;}
}
}
if (f==1)
cout<<x<<" "<<y<<endl;
else cout<<"Impossible"<<endl;
return 0;
}

Задача 2. I-й шлях у таблиці
Задано таблицю N*M, у кожній клітинці якої написана одна рядкова буква англійського алфавіту. Розглянемо всі можливі шляхи від лівого верхнього кутка до правого нижнього кутка, якщо вам дозволено йти тільки вправо і вниз. Конкатенація букв у процесі руху утворює рядок. Будемо вважати, що цей рядок – значення шляху. Тепер розглянемо всі такі шляхи і відсортуємо їх значення в алфавітному порядку. Ваше завдання: знайти значення I-го шляху в цьому відсортованому списку.


void p(int k,int i0,int j0)
{int x,y;
c[k]=a[i0][j0];

if(i0==n-1 && j0==m-1){


if(ii==nomer-1){
for(int i=0;i<n+m-1;i++){cout<<c[i];}
cout<<endl;
}

ii++;
}

else
{
if(i0<n-1)p(k+1,i0+1,j0);
if(j0<m-1 )p(k+1,i0,j0+1);

}


Завдання 1 туру NetOI-2015 (16.10-11.11) 2015 р.


Розв'язки приймаються до
 0 годин 12 листопада 2015 р.

 

Статистика

Пользователей : 261
Статей : 225
Просмотрено статей : 108167

Вход/Регистрация

Нет