c语言练习(大一寒假 一)

字符逆序

将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符

#include<stdio.h>
#include<string.h>
int main()
{
	char a[100];
	gets(a);
	int n,i;
	n=strlen(a);
	for(i=0;i<n;i++)
	{
		printf("%c",a[i]);
	}
	printf("\n"); 
	for(i=n-1;i>=0;i--)
	{
		printf("%c",a[i]);
	}
}

蛇形矩阵

蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。例如输入行数为5,输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

# include <stdio.h>
int main()
{
    int N,i,j,m=1,k=0;// k和m 控制着 不同行元素的求解 
    scanf("%d",&N);
    for(i=1;i<=N;i++)//控制行数 
    {
        for(j=1;j<=N-k;j++,m++) //控制每一行元素 
        {
            if(j==N-k+1) //最后不留空格 
            {
                printf("%d",m*(m+1)/2-k);
                break;
            }
            else
            {
                printf("%d ",m*(m+1)/2-k);
            }
        }
        printf("\n");
        k++;
        m=i+1;   
    }
    return 0;
}
    第一行     m*(m+1)/2
    第二行     m*(m+1)/2-1  m>=2
    第三行     m*(m+1)/2-2  m>=3

校园的树

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,…L,都种有一棵树。马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将树移走后,马路上还有多少棵树。

#include<stdio.h>
int main()
{
    int L,M,i;
    scanf("%d %d",&L,&M);
    int a[L+1];
    for(i=0;i<=L;i++)
    {
        a[i]=1;
    }
    int x1,x2,sum=0;
    while(M--)
    {
       scanf("%d %d",&x1,&x2);
       for(i=x1;i<=x2;i++)
       {
           a[i]=0;
       }
      getchar();
    }

    for(i=0;i<=L;i++)
    {
        if(a[i]!=0)
            sum++;
    }
    printf("%d",sum);
}

做题的方法和报数的方法类似,把不需要的位置赋值为0。

采药(no)

辰辰是个天资聪颖的孩子,医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
输入:输入第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

明明的随机数

明明做一项问卷调查,先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

#include<stdio.h>
int main()
{
   int n,b,c,i,j,t,a[100];
   scanf("%d",&n);
   c=n;
   for(i=0;i<n;i++)
   {
      scanf("%d",&a[i]);//输入10个数
   }
   for(i=0;i<n-1;i++)
   {
      b=a[i];
     for(j=i+1;j<n;j++)
      {
         if(b==a[j]&&b!=0)
        {
            a[j]=0;//令后面重复的数字为0
            c--;
         }
      }
   }
   for(i=0;i<n-1;i++)//冒泡排序
   {
      for(j=i+1;j<n;j++)
      {
         if(a[i]>a[j])
         {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
         }
      }
   }
   printf("%d\n",c);
   for(i=0;i<n;i++)
   {
      if(a[i]!=0)
         printf("%d ",a[i]);
   }
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值