在百度知道上看到有人问这个问题,冒泡排序和字符串结合的题,正好今天没有完成编程任务,所以就拿来练手了,虽然题目不难,但是考察的C语言基础东西还是不少,对于从大一开始就没怎么写C程序的我来说,一两分钟就AC出来也不是一件很容易的事,所以还是要加紧练习才行呀。
题目描述如下:
描述HEIHEI非常喜欢吃花生,他每天都会吃一些花生,心情好的话会吃的比较多,现在已经知道,HEIHEI从周一到周日的心情值递增的,也就是说周一吃的花生最少,周日吃的花生最多。现在给你7个数表示有7堆花生,顺序是打乱的,HEIHEI每天吃的花生数都在这7个数中,现在告诉你今天周几,请你告诉HEIHEI他今天应该吃多少花生。例如花生数有“1 2 5 4 6 7 3”,输入“Monday”,星期一就应该输出1,如果输入“”Thursday”,周四的话应该吃4个,输出4.输入第一行有一个数t(1<=t<=100)表示有t组测试数据。 第二行有7个数分别表示这一周内每一天的花生数。 第三行有一个字符串,表示周几(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday)。输出输出一个数,表示这一天应该吃的花生数。题主的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[7],i,t;
char b[20];
scanf("%d",&t);
while(t--)
{
for(i=0;i<7;i++)
scanf("%d\n",&a[i]);
gets(b);
if(b=="Monday")
i=0;
if(b=="Tuesday")
i=1;
if(b=="Wednesday")
i=2;
if(b=="Thursday")
i=3;
if(b=="Friday")
i=4;
if(b=="Saturday")
i=5;
if(b=="Sunday")
i=6;
printf("%d\n",a[i]);
}
return 0;
}
上述代码犯了两个错误:
1、对第二行输入没有进行排序,输入可能不仅仅是1-7这七个数字;
2、C语言中对字符串的比较应该用string.h里的strcmp(str1,str2)==0来判断,不能直接用“==”,字符可以用“==”,字符串不能这么判断。为什么呢?其实在C里,char str[20]中的str,代表的是这个字符串的地址,如果str1和str2用“==”比较,实际上比较的是两个字符串的地址,当然是永远不可能相等的了。在C-free5里跑的时候编译器没有提醒出错,编译也能通过,因为编译器默认你比较的二者的地址。
其实第二条如果不是这道题,我第一反应也是用“==”,果然还是编程底子太弱了。
以下是我写的代码:
#include<stdio.h>
#include<string.h>
void sort(int *a,int len)
{ /*冒泡排序(升序)*/
int temp;
for(int i=0;i<len;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main()
{
int a[7],t;
char ch[20];
scanf("%d",&t);
while(t--)
{
for(int i=0;i<7;i++)
{
scanf("%d",&a[i]);
}
scanf("%s",ch);
sort(a,7);
if(strcmp(ch,"Monday")==0)
{
printf("%d\n",a[0]);
}
if(strcmp(ch,"Tuesday")==0)
{
printf("%d\n",a[1]);
}
if(strcmp(ch,"Wednesday")==0)
{
printf("%d\n",a[2]);
}
if(strcmp(ch,"Thursday")==0)
{
printf("%d\n",a[3]);
}
if(strcmp(ch,"Friday")==0)
{
printf("%d\n",a[4]);
}
if(strcmp(ch,"Saturday")==0)
{
printf("%d\n",a[0]);
}
if(strcmp(ch,"Sunday")==0)
{
printf("%d\n",a[0]);
}
}
return 0;
}
运行示例:
以此类推。
冒泡排序(升序)代码如下:
void sort(int *a,int len)
{ /*冒泡排序(升序)*/
int temp;
for(int i=0;i<len;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
测试结果示意: