1: 输入一个字符,如果它是数字输出 “It's numbers”,或者它是英语字母输出“It's a letter”,两者都不是输出“Other characters”。
输入一个字符
输出结果
a
It's a letter
4
It's numbers
$
Other characters
代码:
#include
int main(int argc, char *argv[]) {
char a; 输入字符用char
scanf("%c",&a); &取地址确定位置
if(a>='0'&&a<='9') if语句
printf("It's numbers\n"); 输出
else if((a>='a'&&a<='z')||(a>='A'&&a<='Z')) 否则
printf("It's a letter\n"); 输出
else
printf("Other characters\n");
return 0;
}
解题思路:用if语句,判断输入的字符是数字还是字母,可以用字母ASCII码确定if语句中哪些是字母,然后判断,最后输出结果。
2:n的阶乘
输入一个数字正整数n 请求n出的阶乘 n!:
输入 2
输出 2
输入 3
输出 6
5
120
10
3,628,800
12
479,001,600
代码:
#include
#include
int main()
{
int n,i,s=1; 输入正整数
scanf("%d",&n); &取地址
for(i=1;i<=n;) for循环进行判定
{
s=s*i; s=s*i
i++; i重新赋值循环
}
printf("%d",s); 输出结果
return 0;
}
解题思路:输入一个正整数,用for循环求n的阶乘。
3:数据逆序显示
输入一个任意长度的正整数,将该数逆序输出。如,输入正数237,则逆序显示的结果为732。如输入230,则逆序显示的结果为32。
Input
输入一个正整数
Output
该数的逆序显示结果(数字最前面的0不显示,如340反转后。要求输出为43,而不是043)
Sample Input
123
Sample Output
321
代码:
#include
int main(int argc, char *argv[]) { 定义函数
int n,b=0;
scanf("%d",&n); 取地址
while(n)
{ while语句
if(n%10==0&&b) 嵌套if语句
printf("0"); 输出
else 否则
if(n%10>0&&n%10<=9) if语句
{
printf("%d",n%10); 输出
b+=1; 循环,b=b+1
}
n/=10; n=n/10
}
return 0;
}
解题思路:可以通过将题目中三位数分别定义,然后各个数进行反转赋值,将个位数于百位数进行交换,十位数不变,最终求出结果,也可有别的解法。
4: 查找数
题目描述
有5个整型数据存储在数组中,再输入一个数值key,删除数组中第1个等于key的元素,并将剩余的4个数据输出。如果key不是数组中的元素,则显示not found。
输入
先从键盘输入5个整数,然后再输入一个待删除的数据key。
输出
输出删除后的结果,若不存在则输出not found。输出的最后的数据后面到底有没有空格呢?其实没有。。
样例输入
80 65 93 100 81
93
样例输出
80 65 100 81
代码:
#include
int main(int argc, char *argv[]) {
int a[5],key,i,have=0; //have是key存在的状态
for(i=0;i<5;i++) for循环语句
scanf("%d",&a[i]);
scanf("%d",&key);
for(i=0;i<5;i++) for循环语句嵌套
{
if(a[i]==key) //查找是否有key值
{
have++; have进行循环增加
}
}
if(have) if语句判定
for(i=0;i<5;i++) for循环语句
{
if(a[i]!=key)
printf("%d ",a[i]);
}
Else 否则
printf("not found\n");
return 0;
}
解题思路:输入五个数,在输入一个待删除的数,最终结果将待删除的数去掉,也就是结果输出除了待删除的那个数之外的其余四个数,用for循环语句和if语句。
5:三个最大和数
输入n个数字,组成一个长度为n的数组。输出数组三个任意元素最大之和结果。
如:
输入:
5
1 5 4 2 3
输出:
12
其中 5 4 3 三个数字之和为最大
10
4 1 8 4 7 3 1 5 4 8
23
20
12 45 78 1 23 45 78 12 4 1 23 45 5 65 12 78 41 21 45 45
234
代码:
#include
int main(int argc, char *argv[]) {
int n,i,j,k;
scanf("%d",&n);
int a[n],max=0;
for(i=0;i scanf("%d",&a[i]);
for(i=0;i for(j=i+1;j for(k=j+1;k {
if(max max=a[i]+a[j]+a[k];
}
printf("%d",max);
return 0;
}
解题思路:运用一维数组,定义常量用for循环进行比较,最后得到最大值
6:数学函数
输入一个数字n,将n导入下面这个函数,请输出这个函数的结果。
函数:
| f(n)=f(n-1)+2 (n%2=0)
f(n)={ f(1)=1(n=1)
| f(n)=f(n-1)*2 (n%2=1&&n>1)
输入数字n
输出函数f(n)的结果
代码:
#include
int fun(int n) 定义新函数
{
if(n==1) 根据题目
return 1;
if(n%2==0)
return fun(n-1)+2; //情况1
else
return fun(n-1)*2; //情况2
}
int main(int argc, char *argv[]) { 运行定义函数
int n;
scanf("%d",&n);
printf("%d",fun(n)); 输出函数结果
return 0;
}
解题思路:输入一个数字n,将n导入新定义函数,定义新函数输出最终结果。
7: 2进制转16进制
2进制转16进制是一个常见的进制转化过程 9以后的数字分别用 a b c... 代替 您能实现这个功能嘛
提示 答案输出字符型即可
111111
3f
代码:
#include
int main()
{
long long bin,n=0,ct=1;
scanf("%lld",&bin);//输入一个二进制数
while(bin)
{
if(bin%10==1)//如果二进制数最后一位为1
n+=(ct);//①
ct*=2;//②这两句是把二进制每一位拆开,转成10进制
bin/=10;
}
char a[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
char b[1000],t=0;
while(n)//将转成10进制的二进制,在提前设置好的十六进制数组里找到对应数字
{
b[t++]=a[n%16];//将提取的十六进制数放到一个新数组里
n/=16;
}
int i;
for(i=t-1;i>=0;i--)
printf("%c",b[i]);//输出数组
return 0;
}
解题思路:用一维数组和定义字符常量,用while循环进行进制转换,得到结果'
8:核桃的数量
小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
1. 各组的核桃数量必须相同
2. 各组内必须能平分核桃(当然是不能打碎的)
3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)
输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30)
输出一个正整数,表示每袋核桃的数量。
2 4 5
20
#include
int fun(int a,int b)//先定义任意函数确定关系
{
int c;
int d=a,f=b;
do//do while语句先确定c与a. b的关系
{
c=a%b;
if(c==0)
{
break;
}
a=b;
b=c;
}while(1);
//cout << b << endl;
return d*f/b;
}
int main(int argc, char *argv[]) { //定义main函数输出变量
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d",fun(fun(a,b),c));
return 0;
}
解题思路:这题要运用主函数和任意函数以及循环语句,根据要求,输出结果
9:求和
请输入一个长度为n的数组a[n] 并输入整数sum,请输出满足a[x]+a[y]==sum 的a[x],a[y]值 用逗号隔开(英文),若不存在,则输出no solution
#include
main()
{
int n;
int a[1000];//运用一维数组进行求和,由于数组长度未知,定义随机
int i,j;
int sum;
int count=0;
scanf("%d",&n);
for(i=0; i
scanf("%d",&a[i]);
scanf("%d",&sum);
for(i=0; i
for(j=1+i; j
if(a[i]+a[j]==sum)
{
printf("%d,%d\n",a[i],a[j]);
count++;
}
if(count==0)
printf("no solution");
}
解题思路:一个一般的一维数组求和,按照标准步骤一点点得到最后结果
J10:猴子过独木桥
从前有一根很长很长很长很长很长很长很长。。。。。。很长的独木桥,大概有L米那么长。
独木桥上有n只猴子,由于独木桥太细两只猴子相遇后只能往反方向爬去。
这些猴子以每秒一米的速度匀速爬行。我们当前只知道猴子距离独木桥左边的距离为xi,
但是不知道各个猴子当前的朝向。请计算出所有猴子走出独木桥所需要的最长时间和最短时间
样例输入
3
2 6 7
10
样例输出
4 8
#include
main()
{
int L;//独木桥长度
int n;//猴子数量
int x[1000];//保存猴子的位置
int min = 0;//最短时间
int max = 0;//最长时间
int i;
scanf("%d",&n);//输入猴子数量
for(i=0; i
scanf("%d",&x[i]);//依次输入猴子的位置
scanf("%d",&L);//输入杆子的长度
for(i=0; i
{
if(x[i]>L-x[i])//如果更靠近杆子右边的话
{
if(min
min = L-x[i];//最小值为猴子同向的时候杆子右边的距离
}
else if(min
min = x[i];
}
for(i=0; i
{
if(x[i]
{
if(max
max = L-x[i];//则选择杆子右边
}
else if(max
max = x[i];//
}
printf("%d %d",min,max);
}
讲解人:
丰佳成
梁玉娇
刘道庆
扫码加入我们哦~~~~
轻触点击,等你留言