问题描述】依次输入一个整型数组的元素值,然后将该数组前n个元素中的值按逆序重新存放。例如,输入值的顺序为8,6,5,4,1,2,逆序存放后的顺序为2,1,4,5,6,8的顺序存放(注意是逆序存放而不是逆序输出)。
提示:
(1)定义一个数组,数组大小不超过999,为该数组前n个元素赋值。
(2)在循环中,使第0个元素与第n-1个元素交换,第1个元素与第n-2个元素交换,第2个元素与第个n-3元素交换(注意循环次数按n/2确定,n为数据个数)。
(3)输出逆序存放后的各数组元素(使用循环语句)。【输入形式】第一行输入数组的元素个数,第二行输入依次输入元素值,用空格分开
【输出形式】逆序存放后的输入元素,用空格分开
【样例输入】5
12#23#8#76#10
(#表示空格)
【样例输出】10#76#8#23#12
【样例说明】输入中的第一行的5表示对数组的前5个元素进行逆序存放,第二行依次为前5个元素的值;输出结果为逆序存放后数组的前n个元素值。
#include <stdio.h>
#include <string.h>
void swap(int b[],int len)
{
int temp;
int i=0;
for ( i = 0; i < len/2; i++)
{
temp=b[i];
b[i]=b[len-1-i];
b[len-1-i]=temp;
}
i=0;
for ( i = 0; i < len; i++)
{
printf("%d",b[i]);
printf(" ");
}
}
int main()
{
int a[999];
int n;
int i=0;
scanf("%d",&n);
for( i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
swap(a,n);
return 0;
}
【问题描述】
若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数称为可逆素数。编写一个判断某数是否可逆素数的函数,在主函数中输入一个整数,再调用此函数进行判断
【输入形式】用户在第一行输入一个整数。
【输出形式】程序在下一行输出yes或是no,yes表示此数是可逆素数,no表示不是。用户输入的数必须为正整数。注意:yes或是no全是小写输出。
【样例输入】
#include <stdio.h>
#include <string.h>
int isP(int b)
{
int c;
for(c=2;c<b/2+1;c++)
{
if(b%c==0)
{
return 0;
}
}
return 1;
}
void sawp(int c)
{
int i,nc=0;
while(c!=0)
{
i=c%10;
c=c/10;
nc=nc*10+i;
}
if(isP(nc))
{ printf("yes");}
else
{printf("no");}
}
int main(){
int a;
scanf("%d",&a);
if(!isP(a))
{
printf("no");
}
else{sawp(a);}
return 0;
}
【问题描述】字符串逆序:设计函数功能是将一个字符串逆序,函数声明:void stringNx(char *a) 使用这个函数完成将输入的字符串逆序输出
【输入形式】要求输入一个字符串
【输出形式】逆序后输出
【样例输入】abcd
【样例输出】dcba
#include <stdio.h>
#include <string.h>
void stringNx(char *a)
{
int len=strlen(a);
int i;
for ( i = len-1; i >=0; i--)
{
printf("%c",a[i]);
}
}
int main()
{
char a[100];
scanf("%s",a);//字符串不用取地址哦
stringNx(a);
return 0;
}
【问题描述】
两个集合的差集定义如下:
集合A、B的差集,由所有属于A但不属于B的元素构成。
输入两个集合A、B,每个集合中元素都是自然数。求集合A、B的差集。
【输入形式】
从标准输入接收集合中的自然数元素,以空格分隔。-1表示输入结束。
其中,每个集合都不输入重复的元素。
【输出形式】
输出差运算后集合中的元素,以空格分隔。输出元素的顺序与原有集合A输入的顺序一致。
如果A、B的差集为空集,则不输出任何数值。
#include <stdio.h>
#include <string.h>
void less(int r[],int d[],int lr,int ld)
{
int i,j;
int Less;
for ( i = 0; i < lr; i++)
{
for (j = 0; j < ld; j++)
{
if(d[j]==r[i])
{
r[i]=-1;
}
}
}
for(i=0;i<lr;i++)
{
if (r[i]!=-1)
{
printf("%d",r[i]);
printf(" ");
}
}
}
int main()
{
int lr=0, ld=0;
int c=0,i=0;
int a[10],b[10];
while(scanf("%d",&c)!=EOF)
{
if (c==-1)
{
break;
}
a[i++]=c;
lr++;
}
i=0;
while(scanf("%d",&c)!=EOF)
{
if (c==-1)
{
break;
}
b[i++]=c;ld++;
}
less(a,b,lr,ld);
return 0;
}
【问题描述】Fibonacci数列:无穷数列1,1,2,3,5,8,13,21,34,55,…, 被称为Fibonacci数列。求第n个Fibonacci数。
【输入形式】输入数字n
【输出形式】输出第n个Fibonacci数
#include <stdio.h>
#include <string.h>
void Fibonacci(int b)
{
int i;
int s[b];
s[1]=1;s[0]=1;
for( i = 2; i < b; i++)
{
s[i]=s[i-1]+s[i-2];
}
printf("%d",s[b-1]);
}
int main()
{
int a;
scanf("%d",&a);
Fibonacci(a);
return 0;
}
【问题描述】输入一个字符串,将这个字符串中的大写英文字母除去,输出剩余的字符组成的字符串。
【输出形式】输出除去大写英文字母的剩余字符串
【样例输入】Hello, World!
【样例输出】ello, orld!
#include <stdio.h>
#include <string.h>
void Print(char *c)
{
int i,len=strlen(c);
for ( i = 0; i < len; i++)
{
if(c[i]<='A'||c[i]>='Z')
{
printf("%c",c[i]);
}
}
}
int main()
{
char a[100];
gets(a);
Print(a);
return 0;
}
【问题描述】
编写函数int sum(int x),求整数x的各位数字之和。编写一个程序,调用sum函数计算任一输入的整数的各位数字之和。
【输入形式】控制台输入一个整数。
【输出形式】输出一个整数,是根据该输入整数计算各位数字之笔。
#include <stdio.h>
#include <string.h>
int sum(int x)
{
int s=0,temp;
while (x!=0)
{
temp=x%10;
x=x/10;
s+=temp;
}
return s;
}
int main()
{
int a;
scanf("%d",&a);
printf("%d",sum(a));
return 0;
}
【问题描述】完全数是特殊的自然数。它所有的真约数(即除了自身以外的约数)的和,恰好等于它本身。 第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6 第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。 输入一个整数m,输出区间[1,m]内最大的完全数。
【输入形式】输入一个整数。
【输出形式】输出不超过m的最大完全数。
【样例输入】32
【样例输出】28
这里,有限定时间,作者用了一个逆序直接输出进行了优化
#include <stdio.h>
#include <string.h>
void isAll(int b)
{
int i,j,sum=0;
for (j = b; j > 0; j--)
{
for ( i = 1; i <j; i++)
{
if(j%i==0)
{
sum+=i;
continue;
}
}
if(sum==j)
{
printf("%d",sum);
break;
}
sum=0;
}
}
int main()
{
int a;
scanf("%d",&a);
isAll(a);
return 0;
}
【问题描述】
编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
【输入形式】从键盘输入一个字符串,以回车结束输入。要求程序可以处理含有空格的字符串。
【输出形式】程序接收此字符串,然后将其按照字符ASCII码值从小到大的顺序进行排序,并删除重复的字符输出。如果字符串为空,输出也应该为空。
#include <stdio.h>
int main(){
char a[100],b;
int n=0;
int i,j;
while(scanf("%c",&b)){
if(b=='\n')
{
break;
}
a[n]=b;
n++;
}
//排序
for( i=0;i<n-1;i++){
for(j=n-1;j>i;j--){
if(a[j-1]>a[j]){
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
//去空格
int cou=0;
for(i=0;i<n;i++){
if(a[i]!=32)
{
cou=i;
break;
}
}
//去重
for ( i = cou; i < n; i++)
{
printf("%c",a[i]);
while(a[i]==a[i+1])
{
i++;
}
}
return 0;
}
【问题描述】编写一个字符串复制函数strCopy(),将字符串1中奇数位置的字符复制到另一个字符串2中,在主函数中调用函数strCopy()并输出复制后的结果。例如,当字符串1为"This is a C program",则字符串2为"Ti saCporm"。
【输入形式】输入字符串
【输出形式】输出复制后的字符串
【样例输入】This is a C Program
【样例输出】Ti saCporm
【样例说明】
【评分标准】
#include <stdio.h>
#include <string.h>
void strCopy(char *str)
{
int l=strlen(str);
int i;
//char nstr;
for ( i = 0; i < l; i+=2)
{
//nstr+=str[i];
printf("%c",str[i]);
}
}
int main()
{
char a[100],b;
int n=0;
while(scanf("%c",&b)){
if(b=='\n')
{
break;
}
a[n]=b;
n++;
}
strCopy(a);
return 0;
}
【问题描述】在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
给定一个整数序列,请找出这个整数序列的中间数的值。
【输入形式】
输入的第一行包含了一个整数n,表示整数序列中数的个数。
第二行包含n个正整数,依次表示a1, a2, …, an。
【输出形式】
如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。
【样例输入】
6
2 6 5 6 3 5
【样例输出】
5
【样例说明】
比5小的数有2个,比5大的数也有2个。
【样例输入】
4
3 4 6 7
【样例输出】
-1
【样例说明】
在序列中的4个数都不满足中间数的定义。
#include <stdio.h>
#include <string.h>
void Center(int d[],int L,int c)
{
int i,cout=0,cout2=0;
for ( i = 0; i < L; i++)
{
if(d[i]<d[c-1])
{
cout++;
}else if(d[i]>d[c-1])
{
cout2++;
}
}
if(cout==cout2)
{
printf("%d",d[c-1]);
}else{
printf("-1");
}
}
void sort(int a[],int l)
{
int i,j,temp,k;
for ( i = 0; i < l-1; i++)
{
for ( j = i+1; j < l; j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
if (l%2)
{
k=l/2;
}
else
{
k=l/2+1;
}
Center(a,l,k);
}
int main()
{
int n;
int b[1000],m=0;
scanf("%d",&n);
for(m=0;m<n;m++)
{
scanf("%d",&b[m]);
}
int i=0;
sort(b,n);
return 0;
}
【问题描述】有 n 个人围成一圈,顺序排号,从第 1 个人开始报数,从 1 报到 m,凡报到 m 的人退 出圈子,问最后留下的是原来第几号的人?下列函数完成上述处理,其中 m、n 的(m<n) 值由主调函数输入,函数返回值为所求结果。
【输入形式】n m 其中n>m
【输出形式】问最后留下的是原来第几号的人【样例输入】99 3
【样例输出】88
【样例说明】
【评分标准】循环转圈(淘汰制)
#include <stdio.h>
#include <string.h>
int main()
{
int n,m,cout=0,num=0;
scanf("%d%d",&n,&m);
int c[1000];
int i;
for ( i = 0; i < n+1; i++)
{
c[i]=i;
}
while (cout!=n-1)
{
for ( i = 1; i < n+1; i++)
{
if(c[i]!=0)
{
num++;
if(num==m)
{
c[i]=0;
num=0;
cout++;
}
}
}
}
for ( i = 0; i < n; i++)
{
if (c[i]!=0)
{
printf("%d",i);
printf(" ");
}
}
return 0;
}
【问题描述】从键盘上依次输入一个4行4列的二维整形数组的元素值,求其主对角线的元素和。
【输入形式】依次输入二维数组元素的值,用空格分开
【输出形式】主对角线元素和
【样例输入】1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
【样例输出】34
#include <stdio.h>
#include <string.h>
int main()
{
int sum=0;
int a[3][3];
int i,j;
for ( i = 0; i < 4; i++)
{
for ( j = 0; j < 4; j++)
{
scanf("%d",&a[i][j]);
}
}
for ( i = 0; i < 4; i++)
{
for ( j = 0; j < 4; j++)
{
if (i==j)
{
sum+=a[i][j];
}
}
}
printf("%d",sum);
return 0;
}
编写一函数int comb(int a,int b),将两个两位数的正整数a、b合并形成一个整数并返回。合并的方式是:将a的十位和个位数依次放在结果的十位和千位上, b的十位和个位数依次放在结果的个位和百位上。例如,当a=45,b=12。调用该函数后,返回5241。要求在main函数中调用该函数进行验证:从键盘输入两个整数,然后调用该函数进行合并,并输出合并后的结果。
【输入形式】
输入两个两位数的正整数,以空格隔开。【输出形式】
输出合并后的正整数。
#include <stdio.h>
#include <string.h>
int comb(int a,int b)
{
int sum,c,d;
c=a%10;
a=a/10*10;
d=b%10;
b=b/10;
sum=c*1000+a+d*100+b;
return sum;
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d" ,comb(m,n));
return 0;
}
【问题描述】一个数组A中存有N(>0)个整数,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。
【输入形式】每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
【输出形式】在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
#include <stdio.h>
#include <string.h>
void recursion(int b[],int l,int mov)
{
int i,j,t;
for ( i = 0; i <mov; i++)
{
t=b[l-1];
for ( j = 1; j < l; j++)
{
b[l-j]=b[l-j-1];
}
b[0]=t;
}
for ( i = 0; i < l; i++)
{
printf("%d",b[i]);
printf(" ");
}
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
int n=0,a[100];
for(n=0;n<N;n++)
{
scanf("%d",&a[n]);
}
recursion(a,N,M);
return 0;
}
【问题描述】
编写一个函数void str_bin(char str1[ ], char str2[ ]), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。
【输入形式】
分行从键盘输入两个有序字符串(不超过100个字符)
【输出形式】
输出合并后的有序字符串还有一种思路时:有序合并,直接比较大小,但是...我一直报错,没找到错误,所以就没写了
#include <stdio.h>
#include <string.h>
void str_bin(char str1[ ], char str2[ ])
{
strcat(str1,str2);
int l=strlen(str1);
int i=0,j=0;
char t;
for ( i = 0; i < l; i++)
{
for ( j= i; j < l; j++)
{
if (str1[i]>str1[j])
{
t=str1[i];
str1[i]=str1[j];
str1[j]=t;
}
}
}
printf("%s",str1);
}
int main()
{
char a[100],b[100];
scanf("%s",a);
scanf("%s",b);
str_bin(a,b);
return 0;
}
问题描述】
求二维整型数组的"最大点"。二维数组的"最大点"定义为:某个数是所在行的最大值,并且是所在列的最大值。注意:某行或某列上可能有多个"最大点"。
【输入形式】
从控制台读入二维数组。
第一行只有以空格分隔的两个正整数n和m(n,m<=10),n代表二维数组的行数,m代表二维数组的列数。
然后在后续n行上输入二维数组的元素,每行有m个以若干空格分隔的整数,代表二维数组在该行上的所有元素。
【输出形式】
向控制台输出二维数组的"最大点",按行下标、列下标从小到大的顺序输出,每行一个,先输出"最大点"数值,再输出对应的行数、列数(行列都从1开始计数),以一个空格分隔。
解题思路:首先,我们可以发现Aij的i行j列的最大值都必须是他,才是驻点,且要考虑出现多个点的问题,用嵌套循环,去处理比较一行的最大值,再去处理最大值所在列的最大值是不是他,要记录列的下标,最后处理多个点的情况,用flag标记,判断情况输出即可
#include <stdio.h>
int main()
{
int a[10][10], n, m, i, j, k;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
int row, col, s,flag=1,col1,s1,t=0;
for (i = 0; i < n; i++)
{
s = a[i][0];
row = i, col = 0;
for (j = 1; j < m; j++)
{
if (a[i][j] > s)
{
s = a[i][j];
col = j;
}
}
for(j=0;j<m;j++)
{
if (a[i][j] == s&&j!=col)
{
s1 = a[i][j];
col1 = j;
t=1;
}
}
for (k = 0; k < n; k++)
{
if (a[k][col] > s){
flag=0;
break;
}
}
row++,col++;
if(flag)
printf("%d %d %d\n", s, row, col);
flag=1;
if(t)
{
for (k = 0; k < n; k++)
{
if (a[k][col1] > s1)
flag=0;
if(flag==0)
break;
}
col1++;
if(flag==1)
printf("%d %d %d\n", s1, row, col1);
t=0;
}
}
return 0;
}
问题描述】
求二维整型数组的"最小点"。二维数组的"最小点"定义为:某个数是所在行的最小值,并且是所在列的最小值。注意:某行或某列上可能有多个"最小点"。
【输入形式】
从控制台读入二维数组。
第一行只有以空格分隔的两个正整数n和m(n,m<=10),n代表二维数组的行数,m代表二维数组的列数。
然后在后续n行上输入二维数组的元素,每行有m个以若干空格分隔的整数,代表二维数组在该行上的所有元素。
#include <stdio.h>
int main()
{
int a[10][10], n, m, i, j, k;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
int row, col, s,flag=1,col1,s1,t=0;
for (i = 0; i < n; i++)
{
s = a[i][0];
row = i, col = 0;
for (j = 1; j < m; j++)
{
if (a[i][j] < s)
{
s = a[i][j];
col = j;
}
}
for(j=0;j<m;j++)
{
if (a[i][j] == s&&j!=col)
{
s1 = a[i][j];
col1 = j;
t=1;
}
}
for (k = 0; k < n; k++)
{
if (a[k][col] < s){
flag=0;
break;
}
}
row++,col++;
if(flag)
printf("%d %d %d\n", s, row, col);
flag=1;
if(t)
{
for (k = 0; k < n; k++)
{
if (a[k][col1] < s1)
flag=0;
if(flag==0)
break;
}
col1++;
if(flag==1)
printf("%d %d %d\n", s1, row, col1);
t=0;
}
}
return 0;
}
问题描述】
编写一个函数 int same_set(int a[],int b[],int len),
该函数检查相等长度的两个数组是否包含相同的元素,若包含相同的元素,
则返回1,否则返回0,其中参数len是数组a与与数组b的元素个数。
不考虑元素的顺序,如果元素重复,重复次数也相同。在main函数中读入两个整数数组,测试该函数。
【输入形式】
从键盘输入两个数组,第一行输入数组元素个数,第二行输入第一个数组的各个值,
第三行输入第二个数组的各个值。
【输出形式】
如果两个数组包含的元素相同,打印1,否则,打印0。
#include <stdio.h>
#include <string.h>
int same_set(int a[],int b[],int len)
{
int t,flag=1;
int i,j,k;
for ( i = 0; i < len; i++)
{
for ( j = 0; j < len; j++)
{
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for ( k = 0; k < len; k++)
{
if (b[i]>b[k])
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
}
for ( i = 0; i < len; i++)
{
if(a[i]!=b[i])
{
flag=0;
break;
}
}
if (flag)
{
return 1;
}else{
return 0;
}
}
int main()
{
int n;
int n1[100],n2[100];
scanf("%d",&n);
int i;
for ( i = 0; i < n; i++)
{
scanf("%d",&n1[i]);
}
for ( i = 0; i < n; i++)
{
scanf("%d",&n2[i]);
}
printf("%d",same_set(n1,n2,n));
return 0;
}
问题描述】
已知ex的近似值可由下面公式计算得出:
ex=1 + x/1! + x2/2! + x3/3! + ...... + xn/n!
给定x和n,利用上述公式求得ex的近似值。【输入形式】
从控制台输入小数x,和整数n(n>=1),用空格隔开。
【输出形式】
向控制台输出求得的ex 的近似值(小数点后保留6位有效数据)。
#include <stdio.h>
#include <string.h>
#include<math.h>
int main()
{
double x,n,d,k=1;
scanf("%lf%lf",&x,&n);
double sum=1.0,X=x;
int i,j;
for ( i = 1; i < n+1; i++)
{
X=pow((double)x,(double)i);
k=i*k;
d=(double)X/k;
sum+=d;
}
printf("%.6lf",sum);
return 0;
}
问题描述】
输入两个正整数a和b(0<a,b<1000000),求出其最大公约数和最小公倍数并输出。
【输入文件】从标准输入读取一行,是两个整数a和b,以空格分隔。
【输出文件】向标准输出打印以空格分隔的两个整数,分别是a、b的最大公约数和最小公倍数。在输出末尾要有一个回车符。
#include <stdio.h>
#include <string.h>
int gy(int a,int b)
{
int i;
for ( i = a<b?a:b; i >0; i--)
{
if (a%i==0&&b%i==0)
{
return i;
break;
}
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d\r",gy(a,b),(a*b)/gy(a,b));
return 0;
}
【问题描述】编写函数,实现将一个3×3的矩阵转置,矩阵转置在设计的函数内完成,输入输出在 main 中完成。
【输入形式】输入一个3×3的int型整数
【输出形式】输出转置矩阵
【样例输入】
23 42 44
16 35 81
25 14 45
【样例输出】
23 16 25
42 35 14
44 81 45
#include <stdio.h>
#include <string.h>
int main()
{
int a[3][3];
int i,j,t;
for ( i = 0; i < 3; i++)
{
for ( j = 0; j < 3; j++)
{
scanf("%d",&a[i][j]);
}
}
for ( i = 0; i < 3; i++)
{
for ( j = i; j < 3; j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
for(i=0;i<3;i++)
{
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
return 0;
}
问题描述】字符串的大小比较是编程语言里常用的功能,现试着编程运用指针实现两个字符串按字典序大小比较。要求将字符串比较大小的功能做成单独的函数,并在main函数里调用。
编程提示:
(1)确定字符串比较函数的形式:int strcompare(const char * str1, const char * str), 当str1>str2时返回一个正整数,str1==str2时返回0,str1<str2时返回负整数;
(2)strcompare的思路:定义两个char *指针p和q,分别指向str1,str2,开始循环,循环条件表达式为*p == *q && *q != ‘\0’ && *p != ‘\0’,循环体为 p++; q++;。当循环条件不满足时,跳出循环,这代表:
1)p,q指向了两个字符串第一个不相同的字符;
2)str1字符串或者str2字符串到达了字符串结束字符’\0’,此时返回判断p和q指向的字符的大小即可。
【输入形式】输入两个字符串,以回车作为分隔符
【输出形式】比较结果
【样例输入】
abcf
abed
【样例输出】-2
#include <stdio.h>
#include <string.h>
int strcompare(const char * str1, const char * str)
{
const char*p,*q;
p=str1,q=str;
while ( *p == *q &&*q != '\0' && *p != '\0')
{
p++;
q++;
}
return *p-*q;
}
int main()
{
char a[100],b[100];
scanf("%s",a);
scanf("%s",b);
printf("%d",strcompare(a,b));
return 0;
}