第三次测试题解

    xiaoxiao2022-07-07  217

    先是奇数学号5道,再是偶数学号5道 代码可能不易读,但是效率高,是使用的好代码


    奇数1 打擂算法,我的高中老师也是这么讲的 记录下标就行了,反正a[max]就能知道最大值 如果要记录最大值最小值,则需要先把maxvalue初始化成很小的数(-0x7fffffff),把minvalue初始化成很大的数(0x7fffffff),而直接记录下标则不要

    #include<stdio.h> void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;} int main() { int a[10],max=0,min=0; for(int i=0;i<10;i++){ scanf("%d",a+i); max=a[i]>a[max]?i:max; min=a[i]<a[min]?i:min; } swap(a+min,a+max); for(int i=0;i<10;i++){ printf("%d",a[i]); putchar(i==9?'\n':' '); } return 0; }

    奇数2 字符型标量在做运算的时候,按照他的ASCII来运算的,不用记A(65),a(97)啥的 (c=getchar())!=’\n’也是一个很常用的输入方法

    #include<stdio.h> void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;} int main() { char c,t=0; while((c=getchar())!='\n'){ if(c>='a'&&c<='z')putchar(c-'a'+'A'); else if(c>='A'&&c<='Z')putchar(c-'A'+'a'); else putchar(c),t++; } printf("\n%d\n",t); return 0; }

    奇数3 水题,如方德昌所言,副对角线,i+j == n-1,主对角线 i ==j

    #include<stdio.h> void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;} int main() { int m[5][5]; for(int i=0;i<5;i++) for(int j=0;j<5;j++) scanf("%d",&m[i][j]); for(int i=0;i<5;i++) swap(&m[i][i],&m[i][4-i]); for(int i=0;i<5;i++){ for(int j=0;j<5;j++) printf("%d ",m[i][j]); puts(""); } return 0; }

    奇数4 这行列式居然是0道n-1的 三类:

    第一行:i==0中间行:i!=0&&i!=n-1&&(j== 0&&j==n-1) (不是第一行并且不是最后一行 )的 (第一个或者最后一个)最后一行:i==n-1 #include<stdio.h> void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;} int main() { int n,sum=0,t; scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++){ scanf("%d",&t); if(i==0||i==n-1||((i!=0||i!=n-1)&&(j==0||j==n-1))) sum+=t; } printf("%d\n",sum); return 0; }

    更新:另一种思路i== 0||i== n-1|j== 0||j==n-1 就是在边缘的意思,写的是短了些,不过效率是一样的

    #include<stdio.h> void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;} int main() { int n,sum=0,t; scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++){ scanf("%d",&t); if(i==0||i==n-1|j==0||j==n-1) sum+=t; } printf("%d\n",sum); return 0; }

    奇数5 附上sort的食用方法 https://www.cnblogs.com/lrj124/p/7254043.html

    ps:下标为6,是第7个元素,反正a[6]就对了

    #include<stdio.h> void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;} int main() { int a[10],max=0,min=0; for(int i=0;i<10;i++){ scanf("%d",a+i); max=a[i]>a[max]?i:max; min=a[i]<a[min]?i:min; } swap(a+min,a+max); for(int i=0;i<10;i++){ printf("%d",a[i]); putchar(i==9?'\n':' '); } return 0; }

    偶数1 用for输出第一个字符串,输出到第m个的时候,输出第二个字符串

    推荐一个string类,c++的 https://blog.csdn.net/djt4541/article/details/82699515

    #include<stdio.h> int main() { char a[100],b[100];int m; gets(a);gets(b);scanf("%d",&m); for(int i=0;a[i];i++){ putchar(a[i]); if(i==m-1)printf("%s",b); } return 0; }

    偶数2 实际上二维数组都不用,控制好for里面的下标i,j就好了

    #include<stdio.h> int main() { int t,n,sum=0; scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++){ scanf("%d",&t); if(i==j||i+j==n-1)sum+=t; } printf("%d\n",sum); return 0; }

    偶数3 附上sort的食用方法 https://www.cnblogs.com/lrj124/p/7254043.html

    #include<iostream> #include<algorithm> using namespace std; int main() { int a[8]; for(int i=0;i<8;i++) scanf("%d",a+i); sort(a,a+8); printf("%d\n",a[7]+a[6]+a[5]+a[4]+a[3]); return 0; }

    偶数4 水题

    #include<iostream> using namespace std; int main() { int t,s1=0,s2=0; for(int i=0;i<8;i++){ scanf("%d",&t); if(i&1)s1+=t; else s2+=t; } printf("%d\n",s2-s1); return 0; }

    偶数5 也是不用二维数组,控制好下标i,j就好了 但是我怎么记得学线代的时候,是1到n,而不是0到n-1

    #include<stdio.h> int main() { int t,sum=0; for(int i=0;i<4;i++) for(int j=0;j<4;j++){ scanf("%d",&t); if(i==2||j==3)sum+=t; } printf("%d\n",sum); return 0; }
    最新回复(0)