泥塑课、奇怪的国家、字符串长度、元素移除、移除数组中的重复元素

小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值