泥塑课、奇怪的国家、字符串长度、元素移除、移除数组中的重复元素
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过 250立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。
输入格式
小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。
每组输入数据的第一行为一个整数 n,表示了这个班的小朋友数,之后 n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有
9 个小朋友,最少也要有 2 个小朋友,每个小朋友在学籍系统中的名称不超过 8 个字符长。当出现一个班级的小朋友数为
−−1 时,表示没有更多的班级了。输出格式
输出行数与小米老师带的班级数相同,形式为X took clay from Y.,具体请参考样例输出。样例输入
3
10 10 2 Jill
5 3 10 Will
5 5 10 Bill
4
2 4 10 Cam
4 3 7 Sam
8 11 1 Graham
6 2 7 Pam
-1样例输出
Bill took clay from Will.
Graham took clay from Cam.
#include<stdio.h>
int main(){
int m,n,i,j,c,d;
scanf("%d",&m);
char a[m][4];
int p[m];
for(i=0; i<m; i++){
for(j=0; j<4; j++){
scanf("%s",&a[i][j]);
}
}
scanf("%d",&n);
char b[n][4];
int q[n];
for(i=0; i<n; i++){
for(j=0; j<4; j++){
scanf("%s",&b[i][j]);
}
}
for(i=0; i<m; i++){
p[i] = a[i][0]*a[i][1]*a[i][2];
}
int min=p[0],max=0;
for(i=1; i<m; i++){
if(p[i]<min){
min = p[i];
c = i;
}
if(p[i]>max){
max = p[i];
d = i;
}
}
printf("%s took clay from %s\n",a[c][4],a[d][4]);
for(i=0; i<n; i++){
q[i] = a[i][0]*a[i][1]*a[i][2];
}
min=q[0],max=0;
for(i=1; i<n; i++){
if(q[i]<min){
min = q[i];
c = i;
}
if(q[i]>max){
max = q[i];
d = i;
}
}
printf("%s took clay from %s\n",b[c][4],b[d][4]);
return 0;
}
觉得自己定义的变量数组,实在是太多了,累赘麻烦,没法解决问题,才开始定义一个二维数组,也没法把字符串和数值转换,简直对自己感到绝望,朋友帮忙一看,才知道问题这么大,重新,这个构架都错了,哎,其实做出来的时候总觉得挺简单的
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)){
if(n!=-1){
int a[n],x,y,z,X,Y;
char b[n][10];
for(int i=0; i<n; i++){
scanf("%d%d%d",&x,&y,&z);
a[i] = x*y*z;
scanf("%s",b[i]);
}
int max=0,min=1000;
for(int i=0; i<n; i++){
if(a[i]>max){
max = a[i];
X = i;
}
if(a[i]<min){
min = a[i];
Y = i;
}
}
printf("%s took clay from %s.\n",b[X],b[Y]);
}
else break;
}
return 0;
}
有一个奇怪的国家,里面的国民对于事情的态度永远只有两面。当两个人遇到一起讨论一个事情的时候——两个持赞同观点的人遇到一起后会对这个事情都继续赞同;一个持赞同观点的人遇到一个持不赞同观点的人的时候,两人都会不再继续赞同;两个持不赞同观点的人遇到一起讨论后反而会对这个事情开始赞同。
输入格式
输入包括两行,每行包括 N(1≤N≤50)) 个数字,分别表示两个人对于 N个事情对应的看法——0 表示不赞同、1表示赞同。输出格式
输出包括一行,包括 N 个数字,表示两人相遇后,对于这 N件事情的最终看法。样例输入
11100101
00101011样例输出
00110001
很简单的题,反反复复改了很多遍,基础功不扎实,不知道字符串的输入
char a[50],b[50];
int i;
scanf("%s%s",a,b);
这个真的是很难受,比较了其他的代码,学到了,异或这个点比那种一样不一样的要更漂亮一点
#include<stdio.h>
#include<math.h>
int main(){
char a[50],b[50];
int i;
scanf("%s%s",a,b);
int len = strlen(a);
for(i=0;i<len;i++){
printf("%d",!(a[i]^b[i]));
}
return 0;
}
在右侧我们给出了一个已经基本完成的程序,读入了一个字符串,调用了一个叫str_len的函数来计算这个字符串的长度,并输出。
聪明的你应该已经发现了,这个叫str_len的函数并没有完成,在不修改函数原型的情况下,请完成str_len函数,实现我们上述的功能吧。
样例输入
abcdefg样例输出
7
感觉自己基础真的是太差了,用i循环也可以,但时间超过要求,感觉自己曾经学的指针跟没学过完全没啥两样o(╥﹏╥)o,然后看到了一篇博客写数组下标和指针效率的比较问题,
比较好了解[数组----下标与指针效率问题](https://blog.csdn.net/myblog_dwh/article/details/39545593)
#include <stdio.h>
#include <stdlib.h>
int str_len(char *str);
int main(){
char *str = (char *)malloc(100*sizeof(char));
scanf("%s",str);
printf("%d", str_len(str));
free(str);
return 0;
}
int str_len(char *str){
//请在这里完成你的函数
int count=0;
while(*str++){
count++;
}
return count;
return 0;
}
给定一个数组和一个数(该数不一定在数组中),从数组里删掉这个数字,返回剩下的数组长度。
如:A[]=1,2,3,4,5A[] = {1, 2, 3, 4, 5}A[]=1,2,3,4,5,要删除数字 3,那么返回数组长度为4。
亲爱的小伙伴们,题目是不是很简单呢
提示:int removeElement(int A[], int n, int elem)
其中,n代表数组长度,elem代表要删掉的元素。输入格式
第一行输入一个数 n(1≤n≤100),接下来一行n个整数,表示数组A的所有元素 Ai(0≤Ai≤100),接着输入要删除的元素 elem(0≤elem≤100)。输出格式
输出一个整数,表示剩余数组长度。样例输入
2 3 3 3样例输出
0
#include<stdio.h>
int removeElment(int A[], int n, int elem){
int index=n;
for(int i=0; i<n; i++){
if(elem == A[i])
index = index-1;
}
return index;
}
int main(){
int n,elem;
scanf("%d",&n);
int A[n];
for(int i=0; i<n; i++)
scanf("%d",&A[i]);
scanf("%d",&elem);
printf("%d",removeElment(A,n,elem));
return 0;
}
给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。
例如:数组 A={1,1,2},你的程序应该输出 22即新数组的长度,新数组为{1,2}。
要求:不能新开数组分配额外的空间,即常数空间限制。输入格式
输入一个整数 n(1≤n≤1000)。接下来一行 n个整数 Ai(−1000≤Ai≤1000),表示数组 A中的每个元素。输出格式
输出一个整数,表示新数组长度。样例输入
5 0 0 1 1 2样例输出
3
这里我用的移除是把这个数移出Ai(−1000≤Ai≤1000)这个范围,本来想着怎么把这个数从数组里删除呢
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int A[n];;
for(int i=0; i<n; i++){
scanf("%d",&A[i]);
}
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
if(A[i] == A[j])
A[j] = 1001;
}
}
int count=0;
for(int i=0; i<n; i++){
if(A[i]<1001)
count++;
}
printf("%d",count);
return 0;
}
上一篇: 读取配置文件中的内容
下一篇: Nginx综合介绍以及配置文件详解