2023-03-07_牛客网题目等_作业

第一道题:矩阵相等判定_牛客题霸_牛客网 (nowcoder.com)

创建m,n变量,传入数组arr[m][n]代表数组下标:

int m=0,n=0;
int arr[m][n];
scanf("%d",&arr[m][n]);

但是实际上vs不支持柔性数组(我用的vs),如果创建arr[m][n]的话只会显示数组下标不能用变量

所以我们干脆创建一个大概范围的数组:

intint arr1[100][100] = { 0 };

然后用一个for循环,通过i,j输入二维数组的每一个元素

int i=0,j=0;
for (i = 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &arr1[i][j]);
printf("%d",arr[i][j);
}printf("\n");

}

目前的代码就是这样:


int main()
{
   int i=0,j=0;
   int m=0,n=0;
int arr1[100][100];
printf("请输入行和列:");
scanf("%d",&m,&n);
printf("请输入数组:");
for (i = 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
                scanf("%d", &arr1[i][j]);
               printf("%d", arr1[i][j]);
            }printf("\n");

        } 

        return 0;
        }

运行结果:

同样的,再创建第二个数组,输入第二个数组的元素,打印输出看看。

 printf("请输入第二组数组:\n");
      for (i = 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
                scanf("%d", &arr2[i][j]);
                printf("%d\n", arr2[i][j]);
            }printf("\n");

        } 
   

然后我们就需要判断arr1和arr2数组下标是否相同:

   

              for (i= 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
           if(arr1[i][j]==arr2[i][j])
           {
           printf("yes");
           }
               else
               {
               printf("no");
               }
            }printf("\n");

        } 

但是我们发现no打印了4次,那是因为因为打印函数也在for循环里,我们需要把它抽出来。

用count变量。如果下标相同的元素的值不同,coun就++,最后if语句判断count==0,就代表两个数组下表值都相同,就打印yes


           
              for (i= 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
           if(arr1[i][j] != arr2[i][j])
            {
                count++;
            }
        }
    }
    if(count == 0)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
        

但是我们把代码放进牛客网测试:

我们把所有文本提示删除掉:

格式对了,但是超了:

这是因为我们数组的大小没有要求的那么大:

我们把数组大小从int改成long long:

或者用柔性数组:

使用柔性数组显示错误:

因为我们要把scanf("%d%d",&m,&n);放在柔性数组上面,这样才能把我们输入的m,n的值传给柔性数组。

如果显示格式错误:

修改一下格式,不该换行时不要换行,然后运行:

详细代码:


#include <stdio.h>

int main() { 
int m = 0, n = 0;
long long arr1[100][100] = { 0 };  
long long arr2[100][100] = { 0 };  
int i = 0;
int j = 0;
int q=0;
int u=0;
int count=0;
printf("请输入两个数字:");
    scanf("%d%d", &m, &n);
       
    
        //把arr的每个数组元素都打印输出
    
        printf("请输入一组数组:\n");
        for (i = 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
                scanf("%d", &arr1[i][j]);
              
            }printf("\n");

        } 
 

 printf("请输入第二组数组:\n");
      for (i = 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
                scanf("%d", &arr2[i][j]);
               
            }printf("\n");

        } 
   

              for (i= 0; i <m; i++)
        {
            for (j = 0; j <n; j++)
            {
           if(arr1[i][j] != arr2[i][j])
            {
                count++;
            }
        }
    }
    if(count == 0)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
        
    return 0;
}

第二题:序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)

先二分查找找到n值,再删除它(把它后面的数向前覆盖)

int jude(int* arr, int sz, int n)
{

 //数组首元素地址
 int left = 0;

 int right = sz - 1;
 int mid = left + right / 2;
 while (left <= right)
 {
  if (n > arr[mid])
  {
   left = mid + 1;
   mid = (left + right) / 2;
  }
  else if (n < arr[mid])
  {
   right = mid - 1;
   mid = (left + right) / 2;
  }

  return mid;

 }
 return -1;
}
int main()
{
 int tmp = 0;
 
 int i = 0;

 int n = 0;



 int mid= 0;
 printf("请输入要查找的数:");
 scanf("%d", &n);

 int arr[5] = { 1,2,3,4,5 };
 int sz = sizeof(arr) / sizeof(arr[0]);
mid=jude(arr, sz, n);




  
 for (int i = mid; i < 4; i++)
 {
  arr[i] = arr[i + 1];

 }


 for (i = 0; i < 4; i++)
 {
  printf("%d ", arr[i]);
 }

 return 0;
}

第三题:获得月份天数_牛客题霸_牛客网 (nowcoder.com)

#include <stdio.h>

int main() {
    // 判断一年有多少天,首先要判断是不是闰年,是闰年的话(四年一闰&&百年不闰)||四百年一闰
    // 如果判断了是不是闰年那么闰年的二月份有29天,不是闰年的2月有28天。
    // 平时月份1 3 5 7 8 10 12 有31天
    // 其余的 4 6 6 9 11有30天
    int year = 0;
    int i = 1;
    int month = 0;
    while (scanf("%d%d", &year, &month) != EOF) {

        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            if (month == 2) {
                printf("29\n");
            }


        } else {
            if (month == 2) {
                printf("28\n");
            }
        }

        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
                month == 10 || month == 12) {
            printf("31\n");
        } else {
            if (month != 2)

                printf("30\n");

        }
    }
    return 0;
}

第四道题:网购_牛客题霸_牛客网 (nowcoder.com)

#include <stdio.h>

int main() {
    double price = 0;
    int month = 0;
    int day = 0;
    int discounts = 0;
    while (scanf("%lf %d %d %d", &price, &month, &day, &discounts) != EOF) {


        if (month == 11 && day == 11) {

            price = price * 0.7;
        }

        else {
            if (month == 12 && day == 12)
                price = price * 0.8;

        }
        if (discounts == 1) {
            price -= 50;
            if(price>0.00)
            {
            printf("%.2lf", price);
            }
            else {
            printf("0.00");
            }
        } else {
            printf("%.2lf", price);

        }

        
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙鹏宇.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值