目录
输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;
某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?
1、对称数的判定
Description
输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;
例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no
Input
一个整型数
Output
输出是yes,或者no
Sample Input 1
12321
Sample Output 1
yes
Sample Input 2
1231
Sample Output 2
no
Solution
#include<stdio.h>
//对称数,即正着看,反着看都是同一个数
//所以先备份一下原来的数,然后将原来的数从后往前存入一个变量中
//判断这两个数是否一致
int main()
{
int a=0;
int b=0;
int backup_a=0;
scanf("%d",&a);
backup_a=a;
while(a)
{
b=b*10+a%10;
a/=10;
//a%10得到最后一位数,a再/10再%10,得到倒数第二位数,以此类推
}
if(backup_a==b)
{
printf("yes");
}else{
printf("no");
}
return 0;
}
2、求阶乘
Description
利用while或者for循环计算n!的值。
提示:n!=1*2*3…*n
Input
一个正整数n,1≤n≤10。
Output
n!的值。
Sample Input 1
2
Sample Output 1
2
Sample Input 2
5
Sample Output 2
120
Solution
#include<stdio.h>
int main()
{
int a=0;
int total=1;
int i=0;
scanf("%d",&a);
for(i=a;i>0;i--)
{
total*=i;
}
printf("%d",total);
return 0;
}
3、换零钱
Description
某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?
Input
无输入
Output
一个数,表示共有多少种换法
Sample Input 1
无
Sample Output 1
不能告知,因为只有一个数,偷偷告诉你小于100
Solution
#include<stdio.h>
//一共40张,有10元,5元,2元,1元,每个至少一张。组成100元,有几种方法
int main()
{
int a=0;//10元的张数
int b=0;//5元的张数
int c=0;//2元的张数
int d=0;//1元的张数
int count=0;//一共有多少个组合
for(a=1;a<=9;a++)
{
for(b=1;b<=17;b++)
{
for(c=1;c<=42;c++)
{
for(d=1;d<=83;d++)
{
if(a*10+b*5+c*2+d==100&&a+b+c+d==40)
{
count++;
}
}
}
}
}
printf("%d",count);
return 0;
}
4、统计2出现的次数
Description
输入N个数(N小于等于100),输出数字2的出现次数;
解题提示:
整型数组读取5个整型数的方法如下:
int a[100];
for(int i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
Input
输入的格式是两行
第一行输入要输的元素个数,比如5
第二行输入 1 2 2 3 2,那么输出结果为3,因为2出现了3次
Output
统计数字2出现的次数
Sample Input 1
5 1 2 2 3 2
Sample Output 1
3
Solution
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int count=0;
int arr[101];
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<n;i++)
{
if(arr[i]==2)
{
count++;
}
}
printf("%d",count);
return 0;
}
5、字符串逆转并比较大小
Description
读取一个字符串,字符串可能含有空格,将字符串逆转,原来的字符串与逆转后字符串相同,输出0,原字符串小于逆转后字符串输出-1,大于逆转后字符串输出1。例如输入 hello,逆转后的字符串为 olleh,因为hello 小于 olleh,所以输出-1
注意最后的判断一定要这么写,因为strcmp标准C中并不是返回-1和1,而是负值和正值
int result = strcmp(c, d);
if (result < 0)
{
printf("%d\n",-1);
}
else if (result > 0)
{
printf("%d\n", 1);
}
else {
printf("%d\n", 0);
}
Input
输入一个字符串,例如 hello,当然输入的字符串也可能是 how are you,含有空格的字符串
Output
输出是一个整型数,如果输入的字符串是hello,那么输出的整型数为-1
Sample Input 1
hello
Sample Output 1
-1
Sample Input 2
cba
Sample Output 2
1
Sample Input 3
aba
Sample Output 3
0
Solution
#include <stdio.h>
#include <string.h>
void reverse(char arr1[],char arr2[],int length)
{
int i=0;
for(i=0;i<length;i++)
{
arr2[i]=arr1[length-1-i];
}
arr2[length]='\0';
}
int main()
{
char arr1[1000];
char arr2[1000];
gets(arr1);
int len=strlen(arr1);
reverse(arr1,arr2,len);
int result=strcmp(arr1,arr2);
if(result>0)
{
printf("1");
}else if(result<0)
{
printf("-1");
}else
{
printf("0");
}
return 0;
}
6、申请内存
Description
输入一个整型数,然后申请对应大小空间内存,然后读取一个字符串(测试用例的字符串中含有空格),字符串的输入长度小于最初输入的整型数大小,最后输出输入的字符串即可(无需考虑输入的字符串过长,超过了内存大小);
注意下面问题:
char *p;
scanf("%d",&n);
p=malloc(n);
scanf("%c",&c);//注意在scanf和gets中间使用scanf("%c",&c),去除换行
fgets(p,n,stdin);
注意:OJ不支持fflush(stdin)清空标准输入缓冲区操作。
OJ不支持gets,因为C11标准去掉了,部分学校机试可以用gets,部分不可以,因此建议使用fgets
Input
一个整型数和一个字符串,例如
10
hello
Output
输出输入的字符串,上面输入的是hello,那么输出hello
Sample Input 1
10 hello
Sample Output 1
hello
Solution
#include <stdio.h>
#include <stdlib.h>
int main()
{
int size;
scanf("%d",&size);
char *p;
p=(char*)malloc(size);
char c;
scanf("%c",&c);
fgets(p,size,stdin);
puts(p);
free(p);
}