样例输入:
ABC
abc
样例输出:
Equal
样例输入:
abcd
ABcdE
样例输出:
Not equal
源代码:
法一:直接使用strcasecmp函数(类似strcmp函数,但忽略字母大小写)
#include <stdio.h>
#include <string.h>
#define maxlen 81
int main()
{
char str1[maxlen],str2[maxlen];
while(scanf("%s",str1)!=EOF)
{
scanf("%s",str2);
if(strcasecmp(str1,str2)==0)
printf("Equal\n");
else
printf("Not equal\n");
}
return 0;
}
法二:通过循环自主实现字符匹配
#include <stdio.h>
#include <string.h>
#define maxlen 81
int main()
{
int i,flag;
int len1,len2;
char str1[maxlen],str2[maxlen];
while(scanf("%s",str1)!=EOF)
{
scanf("%s",str2);
len1=strlen(str1);
len2=strlen(str2);
flag=1; //1-Equal 0-Not equal
if(len1!=len2) //字符串长度不等,直接判断Not equal
printf("Not equal\n");
else
{
for(i=0;i<len1;i++)
{
if(str1[i]!=str2[i] && (str1[i]-32)!=str2[i] && (str1[i]+32)!=str2[i]) //有不同字符,Not equal
{
flag=0;
break;
}
}
if(flag==1)
printf("Equal\n");
else
printf("Not equal\n");
}
}
return 0;
}
程序截图:
2. 货币问题
已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生。求,至少需要几张货币才能完成支付。
例如,若支付价格为12元的物品,最少需要一张10元和一张2元,即两张货币就可完成支付。
输入:包含多组测试数据,每组仅包含一个整数p(1<=p<=100000000),为需支付的物品价格。
输出:对于每组输入数据,输出仅一个整数,代表最少需要的货币张数。
样例输入:
10
11
13
样例输出:
1
2
3
源代码:
#include <stdio.h>
int fun(int money[],int p)
{
int i,t;
int num=0;
for(i=6;i>=0;i--) //从大到小遍历
{
if(p>=money[i])
{
t=p/money[i]; //t为需要某种面值货币的张数
p-=(money[i]*t);
num+=t;
}
}
return num;
}
int main()
{
int p,count;
int money[7]={1,2,5,10,20,50,100}; //money数组记录7种面值货币的张数
while(scanf("%d",&p)!=EOF)
{
count=fun(money,p);
printf("%d\n",count);
}
return 0;
}
程序截图:
3. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
输入:每个输入文件包含一组测试案例。
对于每个测试案例,第一行输入一个n(n<100000),代表该数组中数字的个数。
接下来的一行输入n个整数。代表数组中的n个数。
输出:对应每个测试案例,输入一行n个数字,代表调整后的数组。
注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。
样例输入:
5
1 2 3 4 5
样例输出:
1 3 5 2 4
源代码:
法一:另设两个数组分别保存奇偶数,然后分别输出(考虑到时间限制要求)
#include <stdio.h>
#define maxn 100000
void fun(int a[],int b[],int c[],int n)
{
int i,j,t;
int ji=0,ou=0;
for(i=0;i<n;i++) //ji ou用于统计奇偶数个数
{
if(a[i]%2==0)
b[ou++]=a[i];
else
c[ji++]=a[i];
}
for(i=0;i<ji;i++) //奇偶数分别输出,先奇后偶
printf("%d ",c[i]);
for(i=0;i<ou-1;i++)
printf("%d ",b[i]);
printf("%d\n",b[ou-1]);
}
int main()
{
int i,n;
int a[maxn],b[maxn],c[maxn];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
fun(a,b,c,n);
}
return 0;
}
法二:类似冒泡排序,进行n-1轮比较,每轮比较中又包含n-1趟比较(但此方法对规模较大的数据不适用,会出现TLE(超时)问题)
#include <stdio.h>
#define maxn 100000
void fun(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]%2==0 && a[j+1]%2!=0)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
int main()
{
int i,n;
int a[maxn],b[maxn],c[maxn];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
fun(a,n);
}
return 0;
}
程序截图: