C语言初阶练习6.0

简介: 目录1. 喝汽水问题2. 调整奇数偶数顺序3. 杨辉三角4. 猜凶手5. 猜名次

1. 喝汽水问题

//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水

// 法一:正常解法

#include<stdio.h>
int main()
{
  int money = 0;
  int total = 0;
  scanf("%d", &money);
  int empty = 0;
  total += money;
  empty += money;
  while (empty >= 2)
  {
    total += empty / 2;
    empty = empty / 2 + empty % 2;
  }
  printf("%d\n", total);
  return 0;
}

image.png当我们举了足够多的例子时,我们可以发现一个规律:瓶数=钱数*2-1

因而引申出法二(特殊解法)

#include<stdio.h>
int main()
{
  int money = 0;
  int total = 0;
  scanf("%d", &money);
  if (money <= 0)
    total = 0;
  else
    total = money * 2 - 1;
  printf("%d\n", total);
  return 0;
}

2. 调整奇数偶数顺序

要求:

//输入一个整数数组,实现一个函数,

//来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

//所有偶数位于数组的后半部分。

#include<stdio.h>
void print(int arr[], int sz)
{
  int i = 0;
  for (i = 0; i <sz; i++)
  {
    printf("%d ", arr[i]);
  }
}
void move(int arr[], int sz)
{
  int* left = arr;
  int* right = arr + sz - 1;
  while (left < right)
  {
    //从左向右找一个偶数
    while ((left < right) && *left % 2 != 0)
    {
      left++;
    }
    //从右向左找一个奇数
    while ((left < right) && *right % 2 != 1)
    {
      right--;
    }
    //将奇数和偶数相交换
    if (left < right)
    {
      int tmp = 0;
      tmp = *left;
      *left = *right;
      *right = tmp;
    }
  }
}
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  print(arr, sz);
  move(arr, sz);
  printf("\n");
  print(arr, sz);
  return 0;
}

image.png

3. 杨辉三角

//1

//1 1

//1 2 1

//1 3 3 1

//……

1.
#include<stdio.h>
int main()
{
  int i = 0;
  int j = 0;
  int arr[10][10] = { 0 };
  for (i = 0; i < 10; i++)
  {
    for (j = 0; j <=i; j++)
    {
      if (j == 0)
      {
        arr[i][j] = 1;
      }
      if (i == j)
      {
        arr[i][j] = 1;
      }
      if ((i >= 2) && j >= 1)
      {
        arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
      }
      printf("%d  ", arr[i][j]);
    }
    printf("\n");
  }
  return 0;
}

image.png

4. 猜凶手

//以下为4个嫌疑犯的供词:

//A说:不是我。

//B说:是C。

//C说:是D。

//D说:C在胡说

//已知3个人说了真话,1个人说的是假话。

//现在请根据这些信息,写一个程序来确定到底谁是凶手。

#include<stdio.h>
int main()
{
  int killer = 0;
  for (killer = 'a'; killer <= 'd'; killer++)
  {
    if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
    {
      printf("%c\n", killer);
    }
  }
  return 0;
}

image.png5. 猜名次

//5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

//A选手说:B第二,我第三;

//B选手说:我第二,E第四;

//C选手说:我第一,D第二;

//D选手说:C最后,我第三;

//E选手说:我第四,A第一;

//比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  int c = 0;
  int d = 0;
  int e = 0;
  for (a = 1; a <= 5; a++)
  {
    for (b = 1; b <= 5; b++)
    {
      for (c = 1; c <= 5; c++)
      {
        for (d = 1; d <= 5; d++)
        {
          for (e = 1; e <= 5; e++)
          {
            if (((b == 2) + (a == 3) == 1)
              && ((b == 2) + (e == 4) == 1)
              && ((c == 1) + (d == 2) == 1)
              && ((c == 5) + (d == 3) == 1)
              && ((e == 4) + (a == 1) == 1))
            {
              if (a * b * c * d * e == 120)
              {
                printf("a=%d b=%d c=%d d=%d e=%d\n", a, b, c, d, e);
              }
                        }
          }
        }
      }
    }
  }
  return 0;
}

image.png

相关文章
|
5月前
|
C语言
C语言初阶:如何判断是否为素数并且输出
C语言初阶:如何判断是否为素数并且输出
42 0
|
6月前
|
算法 C语言 容器
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(上)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
44 0
|
4月前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下
|
4月前
|
存储 C语言
【C语言初阶】指针篇—上
【C语言初阶】指针篇—上
|
5月前
|
C语言
C语言练习代码第一篇
C语言练习代码第一篇
|
5月前
|
C语言
【初始C语言8】详细讲解初阶结构体的知识
【初始C语言8】详细讲解初阶结构体的知识
|
5月前
|
C语言
|
6月前
|
存储 前端开发 算法
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(下)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
18 0
|
5月前
|
编译器 C语言
|
5月前
|
C语言