C编程题练习

1.题目名称:杨氏矩阵

内容:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

#include <stdio.h>

//杨氏矩阵
//1 2 3
//4 5 6
//7 8 9

int main(char* argc,int argv[])
{
    int arr[3][3] = {1,2,3,4,5,6,7,8,9};
    int k = 0, x = 2, y = 0, flag=0;
    scanf("%d",&k); 
    while (x>=0&&y<=2) 
    {
        if (arr[x][y]>k)
        {
            x--;
        }
        else if(arr[x][y]<k)
        {
            y++;
        }
        else 
        {
            printf("找到了,下标是:%d %d\n",x,y);
            flag = 1;
            break;
        }
    }
    if (flag==0) 
    {
        printf("找不到\n");
    }
    return 0;
}

2.题目名称:打印菱形

内容:
      *
     ***
    *****
   *******
  *********
 ***********
*************
 ***********
  *********
   *******
    *****
     ***
      *

#include <stdio.h>

int main()

{

    int line = 0;
    scanf("%d",&line);
    int i = 0,sum=0;
    for (i=0;i<=line;i++) 
    {
        int j = 0;
        for (j=0;j<line-i;j++) 
        {
            printf(" ");
        }
        for (j = 0; j <2*i-1 ; j++)
        {
            printf("*");
        }
        sum = j;
        printf("\n");
    }
    for (i=0;i<line-1;i++) 
    {
        int j = 0;
        for (j=0;j<i+1;j++)
        {
            printf(" ");
        }
        for (j = 0; j < 2*(line-1-i)-1; j++)
        {
            printf("*");
        }
        printf("\n");
    }

return 0;

}

3.题目名称:求0-100000的自幂数

内容:如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数

for (int i = 0; i <= 100000; i++)
{
    //1.判断i是否是自幂数
    int n = 1;
    int tmp = i;
    while (tmp/=10) 
    {
        n++;
    }

    //2.求每一位n次方之和
    tmp = i;
    int sum = 0;
    while (tmp) 
    {
        sum+=pow(tmp % 10,n);
        tmp /= 10;
    }
    
    //3.判断
    if (sum==i) 
    {
        printf("%d\n",i);
    }
}

4.题目名称:求n项和

内容:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个随机正整数。    2+22+222+2222+22222
int a = 0;
int n = 0;
scanf("%d %d",&a,&n);
int i = 0;
int sum = 0;
int k = 0;
for (i=0;i<n;i++) 
{
    k = k * 10 + a;
    sum += k;
}
printf("%d\n",sum);

5.题目名称:瓶换钱问题

内容:喝汽水,1瓶汽水1元,2个空瓶换一瓶汽水,给20元,可以喝多少汽水(编程实现)

    int money = 0;
    int total = 0;
    int empty = 0;
    scanf("%d",&money);
    total += money;
    empty += money;
   // 空 换回饮料  剩余空瓶
   //20   10       0
   // 10   5        0
   // 5    2        1
   // 3    1        1
   // 1    0        0

    while (empty>=2) 
    {
        total = total + empty / 2;
        empty = empty/2+empty % 2;
        printf("%d\n",empty);
        
    }
    printf("%d", total);

6.题目名称:数字判断移动问题

内容:调整数组中数字的顺序使得数组中所有奇数位于数组的前半段,偶数位于数组的后半段

int arr[] = {1,2,3,4,5,6,7,8,9};
int sz = sizeof(arr) / sizeof(arr[0]);
int l = 0;
int r = sz - 1;
while(l<r)
{
    //从前向后找一个偶数
    while (l<r&&arr[l] % 2 != 0)
    {
        l++;
    }
    //从后向前找一个奇数
    while (l<r&&arr[r] % 2 == 0)
    {
        r--;
    }
    if(l<r)
 {
        int temp;
        temp = arr[l];
        arr[l] = arr[r];
        arr[r] = temp;
    }
 }
for (int i=0;i<sz;i++) 
{
    printf("%d\n", arr[i]);
}

7.题目名称:字符串左旋

内容:实现一个函数,可以左旋字符串中的k个字符
//abcdef 左旋1个字符bcdefa
//       左旋2个字符cdefab
//       左旋3个字符defabc

//方法一:中转站思想

void left_move(char* str,int k) 
{
    assert(str);
    for (k; k>0; k--)
    {
        char tmp = *str;//a
        int len = strlen(str);
        int i = 0;
        for (i = 0; i < len - 1; i++)
        {
            *(str + i) = *(str + i + 1);//str=bcdef
        }
        *(str + len - 1) = tmp;//尾部=a
    }
}

int main(char* argc,int argv[])
{
    char arr[] = "abcdef";
    int k = 0;
    scanf("%d",&k);
    left_move(arr,k);
    printf("%s\n",arr);

    return 0;
}

//方法二:左边(左旋字符串)逆序,右边(保持原位字符串)逆序,整体逆序

void reverse(char* left, char * right) 
{
    assert(left&&right);
    while (left < right) {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}

void move(char* str, int k)
{
    int len = strlen(str);

    k %= len;//当K超过字符串长度时
    //左边逆序
    reverse(str, str + k - 1);
    //右边逆序
    reverse(str + k, str + len - 1);
    //整体逆序
    reverse(str, str + len - 1);
}
int main(char* argc,int argv[])
{
    char arr[] = "abcdef";
    int k = 0;
    scanf("%d",&k);
    move(arr,2);
    printf("%s\n",arr);
    return 0;
}

  • 49
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码巨匠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值