郑州轻工业大学zzulioj1140~1149合集

郑州轻工业大学zzulioj1140~1149合集

本人小趴菜一颗,写博客是为了监督自己同时分享资源供大家参考,欢迎大家提出问题。


1140: 小数点后第n位 多实例

题目描述
给你一个小数x,让你算出小数点后第n位是什么,1 <= n <= 6。
输入
首先输入一个t,表示有t组数据,跟着t行:
每行输入一个小数(输入数据保证一定是a.b的形式,总长度不超过100。为了简单化问题,没有循环小数的情况),然后跟一个n,表示小数点后第几位。
输出
输出一个整数,表示小数点后第n位的数。
样例输入 Copy
3
1.234 1
2.345 2
3.456 4
样例输出 Copy
2
4
0
代码如下(示例):

#include<stdio.h>
#include<string.h>
int main()
{
	int n,t,i,j;
	char a[105];
	scanf("%d",&t);
	for(i=0;i<t;i++){
		scanf("%s%d",a,&n);
		for(j=0;a[j]!='\0';j++){
			if(a[j]=='.')
				break;
		}
		if((j+n)>=strlen(a))//j是从0开始到n-1的
			printf("0\n");
		else
			printf("%c\n",a[j+n]);
	}
	return 0;
}

1141: 进制转换(在前面1112题也是用函数求解可以回顾一下)

题目描述
将十进制整数n转换成二进制,并保存在字符数组中,最后输出。要求定义并调用convert()函数, 将十进制整数n对应的二进制数存入字符数组str中。
void convert(int n, char str[]);
输入
输入一个非负整数n,n<2^31。
输出
输出一个01字符串,即n对应的二进制数,不含前导0。输出占一行。
样例输入 Copy
13
样例输出 Copy
1101
代码如下(示例):

#include<stdio.h>
#include<string.h>
void convert(int n, char str[])
{
	int i=0,j,d;
	if(n==0)
	{
		printf("0");
	}
	else
	{
			while(n)
	{
		d=n%2;
		str[i]=d;//把d的值依次存到str[]中
		i++;
		n=n/2;
	}
	//反序输出
	for(j=i-1;j>=0;j--)
	{
		printf("%d",str[j]);//注意此处的输出是%d
	}
	}
	}
int main()
{
	int n;
	char str[40];
	scanf("%d",&n);
	convert(n,str);
 } 

1142: 二进制数的大小

题目描述
输入三个2 进制的数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输。
要求程序定义一个bToD()函数和一个main()函数,bToD() 函数的功能是将二进制数转化为十进制整数,其余功能在main()函数中实现。
int bToD(char str[])
{
//函数返回二进制数str对应十进制整数
}
输入
输入三个2 进制的数,用空格隔开。所有数据均为非负数,二进制数长度不超过30。
输出
将对应的十进制整数按从小到大的顺序输出
样例输入 Copy
1101 110 1011
样例输出 Copy
6 11 13
代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SWAP(a, b, t) {t=a;a=b;b=t;}//用宏定义的方法交换两个数字
int bToD(char str[])
{ //函数返回二进制数str对应十进制整数
    int sum=0,i;
    for(i=0;str[i]!='\0';i++)
    sum=sum*2+(str[i]-'0');
    return sum;
}
int main()
{   int a[3],i,j,t;
    char str[35];
    for(i=0;i<=2;i++)
    {
        scanf("%s",str);
        a[i]=bToD(str);
    }
    for(i=0;i<2;i++)
        for(j=i+1;j<3;j++)
        {//按照从小到大进行排序
            if(a[i]>a[j])
            SWAP(a[i],a[j],t);
        }
    printf("%d",a[0]);
    for(i=1;i<=2;i++)
    printf(" %d",a[i]);
    return 0;
}

1143: 最大值—多种进制

题目描述
输入n个数,每个数的进制由其后面的数字k指定,k>=2且k<=10, 输出最大的数对应的十进制数。
要求程序定义一个KToD()函数和一个main()函数,KToD() 函数的功能是将k进制数转化为十进制整数,其余功能在main()函数中实现。
int KToD(char str[], int k)
{
//函数返回k进制数str对应十进制整数
}
输入
首先输入整数n,然后是n行,每行包含一个字符串和一个整数k,用空格隔开,该字符串表示一个k进制数。所有输入均为非负数。
输出
输出最大的数对应的十进制数。
样例输入 Copy
4
1101 2
22121 3
276 8
134 10
样例输出 Copy
232
代码如下(示例):

#include<stdio.h>
int KToD(char str[], int k)
{
    int i,n=0;
    for(i=0;str[i]!='\0';i++)
    {
        n=n*k+(str[i]-'0');
    }
    return n;
}
int main()
{
   char str[100];
   int a[100],i,j,n,t,k;
   scanf("%d",&n);
   for(i=0;i<n;i++)
   {
       scanf("%s %d",str,&k);
       a[i]=KToD(str,k);
   }
   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",a[0]);
    return 0;
}

1144: 多种进制

题目描述
输入一个十进制整数n,转换成2、3、7、8进制输出
要求程序定义一个dToK()函数,功能是将十进制数转化为k进制整数,其余功能在main()函数中实现。
void dToK(int n, int k, char str[])
{
//将n转化为k进制数,存入str
}

输入
输入一个int范围内的正整数n

输出
输出为4行,分别是n对应的2、3、7、8进制数

样例输入 Copy
13
样例输出 Copy
1101
111
16
15
代码如下(示例):

#include<stdio.h>
void dToK(int n, int k, char str[])
{
    int i=0,j,m;
   while(n)
   {
       m=n%k;
       str[i]=m;
       i++;
       n=n/k;
   }
   for(j=i-1;j>=0;j--)
   {
       printf("%d",str[j]);
   }
}
int main()
{   int n;
scanf("%d",&n);
char str[100];
dToK(n,2,str);
printf("\n");
dToK(n,3,str);
printf("\n");
dToK(n,7,str);
printf("\n");
dToK(n,8,str);
printf("\n");
    return 0;
}

1145: 有问题的里程表(2)(1067同种类型当时用的是比较笨的方法,适用于数据较小的情况,在这里用到的方法是九进制转十进制)

题目描述
某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示15339,汽车走过1公里之后,该里程表显示15350。
输入
输入一个整数num,表示里程表显示的数值,长度不超过9位,且一定不含整数4。
输出
输出一个整数,表示实际行驶的里程。
样例输入 Copy
150
样例输出 Copy
117
代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i, sum = 0;
    char str[10];
    scanf("%s", str);
    for(i = 0; str[i] !='\0'; i++)
    {
        if(str[i] > '4')
        str[i] -= 1;
        sum = sum * 9 + (str[i] -'0');
    }
    printf("%d", sum);
    return 0;
}

1146: 吃糖果

题目描述
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢连续两次吃一样的糖果,喜欢先吃一颗A种类的糖果,下一次换一种口味,吃一颗B种类的糖果,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。
输入
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0 < N <= 1000000),表示糖果的种类。第二行是N个数,表示每种糖果的数目Mi(0 < Mi <= 109)。
输出
对于每组数据,输出一行,包含一个"Yes"或者"No"。
样例输入 Copy
2
3
4 1 1
5
5 4 3 2 1
样例输出 Copy
No
Yes
代码如下(示例):

#include<stdio.h>
int main()
{
	int i,j,t,n,x,sum,max;
	scanf("%d",&t);   //输入t代表t组数据 
	for(i=0;i<t;i++)
	{
		sum=max=0;
		scanf("%d",&n);    
		for(j=0;j<n;j++)    //依次输入n个数据 
		{
			scanf("%d",&x);
			sum+=x;        //sum存所有数据之和,代表一共有多少糖 
			if(x>max)
				max=x;	    //max表示数量最多的一种糖 
		}	
		 //在这里可以先把个数最多的糖果排列整齐,在其相邻两个糖果之间空出
		// ,会得到max-1 个空,若剩下的其他糖果num=max可以填满这max-1个空
		// 则输出Yes否则输出No
		if(max-1<=sum-max)     
			printf("Yes\n");
		else
			printf("No\n");
	}	
	return 0;
} 

1147: 查找子数组题目描述

给定两个整型数组,数组a有n个元素, 数组b有m个元素,1<=m<=n<100,请检验数组b是否是数组a的子数组。若从数组a的某个元素a[i]开始,有b[0]=a[i],b[1]=a[i+1],…,b[m]=a[i+m],则称数组b是数组a的子数组。
输入
输入第一行为两个整数n和m;第二行为数组a的n个整数;第三行为数组b的m个整数,各数据之间用空格隔开。
输出
输出占一行。若b是a的子数组,则输出子数组所在位置i,注意下标从0开始;否则输出“No Answer”。

样例输入 Copy
8 3
3 2 6 7 8 3 2 5
3 2 5
样例输出 Copy
5

代码如下(示例):

#include<stdio.h>
#include<string.h>
#define  N 100
int main(){
    int n,m,k,f,c=0;
    int a[N],b[N];
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<m;i++){
        scanf("%d",&b[i]);
    }
    for(int i=0;i<n;i++){
        f=1;
        //找到第一个相同的下标
        if(b[0]==a[i]) {
        	//开始依次比较a,b数组,不同则立即退出该循环
            for(int j=1;j<m;j++){
                if(b[j]!=a[i+j]){
                    f=0;
                    break;
                }
            }
            //可能会有多种情况,c用来记录是否有子数组
            if(f==1) {
                c=1;
                printf("%d\n",i);
            }
        }
    }
    if(c==0) printf("No Answer\n");
	return 0;
}


1148: 组合三位数之一

题目描述
把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。
输入

输出
按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。
提示
若一个数能表示成某个整数的平方,则称这个数为完全平方数
代码如下(示例):

#include<stdio.h>
#include<math.h>
int convert(int a,int b,int c)
//通过把a,b,c三个数各个位置上的数字个数进行统计判断是否只出现一次
//来满足条件:不出现相同数字
{  int str[100]={0};
int x,i,m=0;
while(a)
{  x=a%10;
str[x]++;
a=a/10;
}
while(b)
{  x=b%10;
str[x]++;
b=b/10;
}
while(c)
{  x=c%10;
str[x]++;
c=c/10;
}
for(i=1;i<=9;i++)
{
    if(str[i]!=1)
       {
           m=1;
       }
}
return m;

}

int main()
{
    int i,j,k,n,x,t=0;
    int a[100]={0};
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=9;j++)
        {
            for(k=1;k<=9;k++)
            {
                if(i==j||j==k||i==k)//为了满足条件1~9只出现一次
                {
                    continue;
                }
                else
                {
                    n=i*100+j*10+k;
                    x=sqrt(n);
                    if(x*x==n)//保证平方数
                    {
                        a[t]=n;//存到a[]数组中
                        t++;
                    }
                }
            }
        }
    }
    i=0,j=0,k=0;
    //强制排序
    for(i=0;i<t;i++)
    {
        for(j=i+1;j<t;j++)
        {
           for(k=j+1;k<t;k++)
           {
               if(convert(a[i],a[j],a[k])==0)
               {
                   printf("%d %d %d\n",a[i],a[j],a[k]);
               }
           }
        }
    }

}

 

1149: 组合三位数之二

题目描述
把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输出每组的三个三位数。
输入

输出
输出所有满足条件的三位数组合,按第一个数的升序顺序输出。
样例输出 Copy
192 384 576
代码如下(示例):

#include<stdio.h>
int fanc(int x,int y,int z)
{
    int a,arr[10]={0};
    while(x)
    {
        a=x%10;
        arr[a]++;
        x/=10;
    }
    while(y)
    {
        a=y%10;
        arr[a]++;
        y/=10;
    }
    while(z)
    {
        a=z%10;
        arr[a]++;
        z/=10;
    }
    for(int i=1;i<10;i++)
        if(arr[i]!=1)
            return 0;
        return 1;
}
int main()
{
    int x,y,z;
    for(x=100;x<=333;x++)
    {
        y=x*2;
        z=x*3;
        if(fanc(x,y,z))
            printf("%d %d %d\n",x,y,z);
    }
    return 0;
}
  • 48
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橘花猫不爱睡懒觉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值