
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int *a; //массив
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int *a; //массив
Int main(void){
freopen("input.txt","r",stdin);// считывай из файла как из стандартного потока!
FILE *out=fopen("output.txt","w");
int i;
list lst;
init(&lst);
while(gets(s))//считываем строки, пока не настанет конец файла
ins(&lst,s);//добавляем очередную строку в список
for(i=0;i < lst.n; rotate(&lst), i++)
find_num16(lst.head->s,out);
fclose(out);//закорываем выходной файл!
return 0;
}
№18. #include <stdio.h>
#include <stdlib.h>
Void sort(int a[],int lt,int rt){
int i=lt,j=rt,x=a[(lt+rt)/2],t;
do{
while(a[i]<x) i++;//находим следующий, который больше или равен
while(a[j]>x) j--;//находим следующий, который меньше или равен
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
//когда встретимся (i==j, а этот момент обязвтельно наступит), то удобно сделать i++ и j-- [ключевое слово: обрезать]
i++;j--;
}
}while(i<=j);
if(lt < j) sort(a,lt,j);//сортируем первую половину
if(i < rt) sort(a,i,rt);//сортируем одну половину
//в двух половинах суммарно уже как минимум на 1 элемент меньше!
}
char bad(int x){
char res=1;//res - четность количества единиц в двоичном представлении числа
while(x){
res^=(x&1);//изменяем четность, если последний бит числа x единичный
x>>=1;//делим x на 2
}
return res;
}
Int main(void){
FILE *in=fopen("input.txt","r");
FILE *out=fopen("output.txt","w");
int n,i,sum=0; //n-кол-во
Int *a; //массив
fscanf(in,"%d",&n);
a=(int*) malloc(n*sizeof(int));//выделение памяти под массив
for(i=0;i<n;i++){
fscanf(in,"%d",&a[i]);
sum+=a[i];
if(bad(a[i]))
a[i]=sum-a[i];
}
sort(a,0,n-1);
for(i=0;i<n;i++)
fprintf(out,"%d ",a[i]);
fprintf(out,"\n");
fclose(out);
return 0;
}
№19. #include <stdlib.h>
#include <stdio.h>
void swap(int *a,int *b){
int t;
t=(*a);
(*a)=(*b);
(*b)=t;
}
int val(int x){
return (x&255) + (x>>24);//(x&255) - числовое значение младшего байта, (x>>24) - старшего
}
void bubble_sort(int a[],int n){
int i,j;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
if(val(a[j]) > val(a[j+1]))
swap(&a[j],&a[j+1]);
}
Int main(void){
FILE *in=fopen("input.txt","r");
FILE *out=fopen("output.txt","w");
int n,i;
int *a;
fscanf(in,"%d",&n);
a=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
fscanf(in,"%d",&a[i]);
bubble_sort(a,n);
for(i=0;i<n;i++)
fprintf(out,"%d ",a[i]);
fprintf(out,"\n");
return 0;
}
№20. #include <stdio.h>
#include <stdlib.h>
#define MAXN 1000
Void sort(int a[],int lt,int rt){
int i=lt,j=rt,x=a[(lt+rt)/2],t;
do{
while(a[i]>x) i++;//находим следующий, который больше или равен
while(a[j]<x) j--;//находим следующий, который меньше или равен
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
//когда встретимся (i==j, а этот момент обязвтельно наступит), то удобно сделать i++ и j-- [ключевое слово: обрезать]
i++;j--;
}
}while(i<=j);
if(lt < j) sort(a,lt,j);//сортируем первую половину
if(i < rt) sort(a,i,rt);//сортируем одну половину
//в двух половинах суммарно уже как минимум на 1 элемент меньше!
}
char ok(int x){
if(x<0) x=-x;
int res=0;
while(x){
res+=(x%10);
x/=10;
}
return res%2;//если сумма цифр четная, то res%2 = 0, если нечетная - 1
}