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;
}