DDebug

1.组合问题(10分)
在这里插入图片描述

#include<stdio.h>
float f(int m,int n);
int main()
{
	int m,n,answer=9;
	float ans;
	scanf("%d%d",&m,&n);
	if ((m < n) && (m > 0) && (n > 0))
		answer = 0;
	if ((m == n) && (m > 0) && (n > 0))		//两个等号
		answer = 1;
	if ((m < 0) || (n < 0))
		answer = -1;
	if ((m > n) && (m > 0) && (n > 0))
		ans=f(m,n);
	if(answer==9)
		printf("%.0f",ans);		//看好答案给的样例,应该是只保留整数位
	else
		printf("%d",answer);
}
float f(int m, int n)
{
	int i;
	float s = 1;
	for (i = m; i > (m - n); i--)
		s = s * i / (i - (m-n));	//除法就要注意是不是会出现小数
	return s;
}
//这个题的函数f不能用一个函数实现,因为这个返回值类型你是写int还是float呢。

2.逆序数(10分)
问题描述:编写函数,求任意四位自然数的逆序数,例如5432就是2345的逆序数。
输入:任意一个整数
输出:如果输入的不是四位自然数,则输出0;否则输出对应的逆序数。
样例1:输入 12 输出 0
样例2:输入 6543 输出3456

#include<stdio.h>
int main()
{
	int a[10],i,ans,x,j;
	for(i=0;i<=3;i++)
		scanf("%d",&a[i]);		//这样输入的得是6 5 4 3,而且输入1 2的话,不论怎么按回车,都不会被接收,还在等着你输入数
	if (i == 4)
	{
		for (j = 1; j <= i / 2; j++)
		{
			x=a[j-1];
			a[j - 1]=a[i-1-j+1];
			a[i - 1 - j + 1]=x;
		}
		for (i = 0; i <= 3; i++)
			printf("%d", a[i]);
	}
	else
	{
		ans = 0;
		printf("%d", ans);
	}
	return 0;
}

可见对于这种连着输入的一串数,我是不能直接用一个数组,然后把各位放到各个元素中。

修正:

#include<stdio.h>
int main()
{
	int x,flag,i;
	scanf("%d",&x);
	if((x>=1000)&&(x<=9999))	//这种最基本的方法不要忘了
		flag=1;
	else
		flag=0;
	if(flag==0)
		printf("%d",flag);
	else
	{
		for (i = 1; i <= 4; i++)
		{
			printf("%d",x%10);
			x=x/10;
		}
	}
	return 0;
}

题目编号:Exp03-Basic02,GJBook3-05-06
题目名称:逆序数
题目描述:编写函数,求任意位自然数的逆序数,例如5432就是2345的逆序数。
输入:任意一个整数(<10^18) 。
输出:如果输入的不是自然数,则输出NULL;否则输出对应的逆序数。
样例1:
输入:120
输出:21
样例2:
输入:999999999999999999
输出:999999999999999999
样例3:
输入:-1357
输出:NULL

#include<stdio.h>
int main()
{
	int i;
	long long int x,y=0;
	scanf("%lld", &x);
	if (x<0)
		printf("NULL");
	else
	{
		for (i = 0;; i++)
		{
			y = y * 10;		//这一句和下一句不能交换,如果交换的话,就会多乘上一个10
			y=y+(x%10);
			x=x/10;
			if(x==0)
				break;
		}
		printf("%lld",y);
	}
	return 0;
}

3.循环右移(10分)
问题描述:编写程序,把给定长度为10的整数数组中所有元素循环右移 j 位。
输入:从键盘随机输入十个整数,作为数组a的元素;输入一个正整数j作为移动位数。
输出:移动后的整数数组a中的所有元素,各元素间无间隔字符。
样例:输入 1 2 3 4 5 6 7 8 9 0
2
输出 9012345678
时间限制:500ms内存限制:32000kb

int main()
{
	int a[10],i,wei,x,j;
	for (i = 0; i <= 9; i++)
		scanf("%d", &a[i]);
	scanf("%d",&wei);
	for (i = 1; i <= wei; i++)
	{
		x=a[9];
		for (j = 8; j >= 0; j--)
		{
			a[j + 1] = a[j];	//这里原来一个一个向后移不行,得从后往前移才行		//再就是要看清是把谁赋给谁,别搞反了
		}
		a[0] = x;
	}
	for (i = 0; i <= 9; i++)
		printf("%d", a[i]);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值