通师高专科技创新社团队训练赛(20211027)题解报告

通师高专科技创新社团队训练赛(20211027)

A 逆序输出

题目链接

题意

逆序输出。

思路

  • 1.十个整数。
  • 2.逆序输出,空格分开。

坑点

无。

代码

#include<stdio.h>
int main()
{	
	int num[10];//定义一个10的数组
	for(int i=0;i<10;i++)//输入i行
	{
	scanf("%d",&num[i]);
	}

	for(int i=9;i>=0;i--)10-1开始依次进行循环,i-1
	{
	printf("%d ",num[i]);输出
	}
		
	return 0;
}

总结

for 的循环使用 难度简单。

B 求平均年龄

题目链接

题意

求平均值。

思路

  • 1.输出一行,该行包含一个浮点数。
  • 2.保留到小数点后两位。

坑点

  • 1.注意定义的类型。
  • 2.小数点的输出的格式。

代码

#include<stdio.h>
int main()
{ 
    double sum;//题目中结果为小数, 浮点型有double和float 
    int n;  //定义整数n为输入的数的个数  
    scanf("%d",&n);//输入整数n 
    int num[105];//有 100组数 
	for(int i=0;i<n;i++) //循环起点为0,终点的数值小于整数n ,i+1  
	{
	   scanf("%d",&num[i]);//循环里输入num[i]   
	   sum=sum+num[i];//总和就加num[i] sum+=num[i]
	}
    sum=sum/n;//循环结束, 最终的结果除输入数的个数,得到平均年龄
    printf("%.2f",sum);//输出结果后面要加两位小数 
    return 0;
} 

总结

for的循环使用 输出格式 难度简单。

C 奇数单增数列

题目链接

题意

找出所有奇数并进行从小到大的排序。

思路

  • 1.找出所有的奇数。
  • 2.进行排序。

坑点

  • 1注意输出格式。

代码

#include<stdio.h>
int num[505];//大气的开五个数  num包括505个数的位置 
int ans[505];//好多奇数在ans505里的奇数 
int main()
{ 
   int n,cnt=0;//定义 n,奇数从0取 
   scanf("%d",&n);//输入n个数 
   for(int i=0;i<n;i++)//起点为0,终点到n-1,i每次加上1
  { 
      scanf("%d",&num[i]);//循环里输入i为上述条件的数组 
 
  if(num[i]%2!=0)//如果num[i]对2取余不为0,就是奇数 
  {
   ans[cnt]=num[i];//ans[cnt]里奇数就等于num[i]里的数 
   cnt++;   //奇数+1 
  }
 } //取奇数 
 for(int i=0;i<cnt;i++)// 起点为0,终点<取得的奇数,i+1 
 {
  int temp; //设一个可以进行转换的值 
  for(int j=0;j<cnt-1;j++)//起点为j=0,cnt里的奇数两两比较需要cnt-1次(4个数比较需要比较3次),j+1  
  {
   if(ans[j]>ans[j+1])//判断ans数组里的前一位数是否大于后一位数 
      { temp=ans[j];//如果大于,把ans[j]的数赋值到temp中 
        ans[j]=ans[j+1];//如果大于,把ans[j]的后一位赋值给ans[j] 
        ans[j+1]=temp;//如果大于,把temp赋值给ans[j+1]
   }
  }
 
 }//从小到大排序 
 for(int i=0;i<cnt;i++)// 在这个起点为0,终点<取得的奇数,i+1的循环中 
 {
  printf("%d",ans[i]);// 输出的是ans里面的数 
  if(i!=cnt-1)  //如果 ans里面的数不是奇数的最后一位 
  {
   printf(",");//那么输出值后面要加逗号 
  }
 }
 return 0;
} 

总结

冒泡排序,输出格式的注意 难度偏难。

D 最高的数

题目链接

题意

求最大值。

思路

  • 1.先定一个总数和一个有输入的值,和一个最大值的变量。
  • 2.在让输入的值与最大值进行比较。

坑点

无。

代码

#include<stdio.h>
int main()
{ 
  int n,a;//n是总数,a是输入的数 
  int maxn=0;//maxn初始值为零 ,maxn表示最大的数
  scanf("%d",&n); 
  for(int i=1;i<n;i++)//输入是从1开始,n结束,每组循环后i+1 数的排序
  {
   scanf("%d",&a);//输入a组数据 
  if(maxn<=a)//判断最大值是否小于等于a  如果最大值小于等于数据里输入的数 (a)    
            //a{1,2,3,4,5} maxn=6 maxn大于a  达咩
            // a{1,2,3,4,5} maxn=5 maxn小于等于a  √ 
  { 
   maxn=a;//那么这组数据的最大值就是a  
  } 
 }
  printf("%d\n",maxn);//输出最大值 
return 0;
 } 

总结

for循环 if判断 难度中等。

E 数列问题

题目链接

题意

输入一个数,然后输出对应的值。

思路

  • 1.输入一个数。
  • 2.输出打印值。

坑点

  • 1.注意num的值要加long long 因为会爆int。

代码

#include<stdio.h>
long long int num[65];//num数组里的数会超过10的9次方,所以用long long int 
int main()
{ 
  int n;//定义n个数 
  scanf("%d",&n);//输入n个数 
  num[0]=3;//下标为0的数第一个是 3
  num[1]=4;//下标为1的数第一个是 4
  num[2]=5;//下标为2的数第一个是 5     []是下标 
  
  for(int i=3;i<=60;i++)//起点为从下标第三位开始,i到60结束 ,i+1 
  { 
   num[i]=num[i-1]+num[i-2]+num[i-3];// 每个数都等于前三个数的和 
   
  }
  printf("%lld",num[n-1]);//第一项是从下标为0开始,第n个就是从下标为n-1开始 
  //3 4 5 12 ...n 
  //0 1 2  3.. .n-1
  return 0;
 } 

总结

下标的运用 ,long long int的运用,难度简单 。

G 整数的个数

题目链接

题意

输入一个组数组,如果能被1整除记一下,如果能被5记一下,然后能被10整除记一下。

思路

  • 1,第一行包含一个正整数 k。
  • 2.,第二行包含 k 个正整数,每两个正整数用一个空格分开。

坑点

  • 无。

代码

#include<stdio.h> 
int main()
{ 
 int k,a1=0,a5=0,a10=0;//定义k个正整数 ,令数组有1的个数,5的个数,10的个数赋初值为0 
 scanf("%d/n",&k);//输入k个数
 
 int  num[105];//大气的多开五个数,正整数的个数在105之内 
 for(int i=0;i<k;i++)//循环起点为0,终点小于k个正整数,i+1 
 { 
  scanf("%d",&num[i]);//循环里输入i为上述条件的数组 
 }
 for(int i=0;i<k;i++)//循环起点为0,终点小于k个正整数,i+1
 {
   if(num[i]==1)// 如果数组里面的为1 
  {
   a1++;//存储数组里面值为1的数的个数+1
  }
   if(num[i]==5)// 如果数组里面的为5 
  {
  
   a5++;//存储数组里面值为5的数的个数+1
  }
   if(num[i]==10)//如果数组里面的为10
  {
   a10++;//存储数组里面值为10的数的个数+1
  }
 }
 printf("%d\n%d\n%d\n",a1,a5,a10);//最终输出三行 第一行是数组里有1的数的个数;第二行是数组里有5的数的个数;第三行是数组里有10的数的个数 
 return 0;
}

总结

if的判断,循环排序 难度简单。

H 6048

题目链接

题意

输入一个4位数然后输出这4个数的重新组成一个四位的最大数和一个最小数,算出两者间的差。

思路

  • 1.输入一个四位数。
  • 2.把四位数拆开为4个单独的字符。
  • 3.然后重新排序,然后判断。

坑点

  • 1.数的排序。

代码

#include<stdio.h>
int num[10];
int main()
{
 	int n,maxn,minn;//定义n个整数 
 	scanf("%d",&n);//输入n的值 
                // 4(千位) 3(百位) 2(十位) 1(个位) 
                //num  0    1        2        3     【下标】 

 	num[3]=n%10;//总数4321取余10得出1 num[3]表示个位数 
 	num[2]=n/10%10;//总数4321除10变成432 再取余10得出2就是432/10=43......2  num[2]表示十位数   
 	num[1]=n/100%10; //总数4321除100变成43; 43/10=4....3就是取余3  num[1]表示百位数   
 	num[0]=n/1000;//总数4321除1000变成4; num[0]表示千位数 
                  //把数组从大到小排 
 	for(int i=0;i<4;i++){ // 在这个起点为0,i小于4位数,i+1的循环中
   		for(int j=0;j<3;j++){// 起点为0,j循环3次,j+1 
             int temp; //设一个可以进行转换的值 
             if(num[j]<num[j+1]){ //如果j小于j+1(前一位数小于后一位数) 就要执行下面的交换 
    	temp=num[j];//num[j]的数赋值到temp中 
    	num[j]=num[j+1];//num[j+]赋值到num[j]中 
    	num[j+1]=temp;//temp赋值到 num[j+]中 
   }
  }
 }
 		maxn=num[0]*1000+num[1]*100+num[2]*10+num[3];
  // 4(千位) 3(百位) 2(十位) 1(个位) 
  //num  0         1         2         3     下标 
 //最大值这个数就是  4*1000+3*100+2*10+1=4000+300+20+1=4321 
 //最小值这个数就是  1*1000+2*100+3*10+4 =1000+200+30+4=1234 
    	minn=num[3]*1000+num[2]*100+num[1]*10+num[0];
 		printf("%d",maxn-minn);//输出是最大值-最小值 
 		return 0;
 } 
  

总结

冒泡排序,数的取余排序,难度困难。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

霖承科技 LinChance

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

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

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

打赏作者

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

抵扣说明:

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

余额充值