#include<stdio.h> #include<string.h> char ch[103],str[103]; int main() { int n,max,a,b,i,d,m; while(~scanf("%d",&n)) { max=0; for(i=0;i<n;i++) { scanf("%s%d%d",str,&a,&b); if(b<200) // 体积少于200的,直接忽略 continue; d=(b/200)*200; if(d>1000) // 体积大于1000的,按1000算 d=1000; if(max<d/a) { max=d/a; strcpy(ch,str); m=b; } if(max==(d/a)&&m<b) // 如果价格都最便宜,则选择体积大的 { strcpy(ch,str); m=b; } } printf("%s\n",ch); } return 0; }
时间: 2024-03-28 08:39:31 浏览: 11
这段代码是一个简单的模拟题目的解法,输入有多组数据,每组数据包含 n 个物品,每个物品有名称、价格和体积三个属性。要求找到价格体积比最优的物品,并输出其名称。其中体积小于 200 的物品直接忽略,体积大于 1000 的物品按 1000 计算。
代码中用 max 记录当前最优值,用 ch 和 m 记录最优物品的名称和体积。如果有多个物品价格体积比相同,则选择体积大的。
这段代码的时间复杂度为 O(n),对于数据规模较小的情况下能够很好地解决问题。
相关问题
#include<stdio.h> #include<string.h> void main() { char str[10]="Ch\nina"; printf("%d",strlen(str)); }
这段代码的作用是输出字符串 "Ch\nina" 的长度,即 6。但是可以看出,在数组定义时,只分配了 10 个字符的空间,而 "Ch\nina" 长度为 7,因此存在字符串溢出的问题。建议将数组大小定义为至少 8 个字符。同时,main 函数的返回值应该为 int 而不是 void。修改后的代码如下所示:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[8] = "Ch\nina";
printf("%d", strlen(str));
return 0;
}
```
学习-编写函数将两个字符串连接起来#include<stdio.h> #define N 80 char * mystrcat(char ch1[],char ch2[]); int mystrlen(const char str[ ])
好的,这是一个关于字符串操作的问题。对于第一个问题,可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
char* mystrcat(char ch1[], char ch2[]) {
char* result = (char*)malloc(sizeof(char) * (strlen(ch1) + strlen(ch2) + 1));
strcpy(result, ch1);
strcat(result, ch2);
return result;
}
int mystrlen(const char str[]) {
int len = 0;
while (str[len] != '\0') {
len++;
}
return len;
}
int main() {
char ch1[N], ch2[N];
printf("请输入两个字符串:\n");
scanf("%s%s", ch1, ch2);
char* result = mystrcat(ch1, ch2);
printf("合并后的字符串为:%s\n", result);
free(result);
printf("第一个字符串的长度为:%d\n", mystrlen(ch1));
printf("第二个字符串的长度为:%d\n", mystrlen(ch2));
return 0;
}
```
其中,`mystrcat` 函数接受两个字符串参数,使用 `malloc` 分配新的内存空间来存储合并后的字符串,并使用 `strcpy` 和 `strcat` 函数拼接两个字符串。最后,返回合并后的字符串指针。
`mystrlen` 函数接受一个字符串参数,通过循环计算字符串的长度,并返回字符串的长度值。