/***
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。
他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。
于是有人询问他的年龄,
他回答说:“我年龄的立方 是个4位数。
我年龄的4次方是个6位数。
这10个数字正好包含了从0到9这10个数字,
每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
直接提交他那时的年龄数字。
答案:18
思路:通过暴力破解的方法,
找到年龄的大概范围,
假设他的年龄为x,10^3=1000, 30^4=8100,
说明x的范围在[10,30]之间。
***/
#include
#include
int main(){
int year;
int i;
for(i = 10;i<=30;i++){//猜测在10~30间的年龄
printf("%d %.0f %.0f\n",i,pow(i,3),pow(i,4));
}
return 0;
}
/***
某君新认识一网友。当问及年龄时,他的网友说:
“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子
的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦.
请填写表示可能情况的种数。
答案:7
思路:网友的年龄比他儿子大27,就说明网友至少27岁,
即为初始值为27,两位数最大也就是99,范围【27,99】,
假设网友年龄为i,设个位为b,十位数为10a,
把他的年龄数字交换位置正好是他的儿子的年龄,
那么他儿子的年龄为10b+a,
判断条件是网友的年龄减去27等于他儿子的年龄,
sum累加几种可能性。
***/
#include
int main(){
int son,year,count =0;
int i;
for(i = 27;i<=99;i++){
if(i-27==(i%10)*10+(i/10))
printf("%d\n",i);
}
return 0;
}
/***
某君从某年开始每年都举办一次生日party,
并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请输出他开始过生日party的年龄数。
注意:你输出的应该是一个整数,
不要输出任何多余的内容或说明性文字。
输入
没有输入。
输出
输出一个整数,即某君开始过生日party的年龄数
提示
用printf或cout输出答案。
答案:26
思路:假设i为初始年龄,j为终止年龄,j肯定要大于i,
那么j=i+1,k为多少根蜡烛!暴力累加。
***/
#include
int main(){
int i,j,k;
for(i=1;i<=100;i++){//开始过的年龄
for(j=i+1;j<=100;j++){//终止的年龄
int sum=0;
for(k=i;k<=j;k++){
sum+=k;
}
if(sum==236){
printf("%d ",i);
}
}
}
return 0;
}
/***
有限五位数,个位数为6且能被3整除的五位数有多少个?
答案:3000
思路:首先分析5位数的范围【10000,99999】,
个位数为6说明至少两位数,并对3取余,ans累加。
***/
#include
int main(){
int i;
int count =0;
for(i=10000;i<=99999;i++){
if(i%10==6&&i%3==0)
count++;
}
printf("%d ",count) ;
return 0;
}
/***
小明是个急性子,上小学的时候经常把老师写在黑板上的
题目抄错了。
有一次,老师出的题目是:36 x 495 =?
他却给抄成了:396 x 45 = ? 但结果却很戏剧性,
他的答案竟然是对的!!
因为 36 * 495 = 396 * 45= 1782 类似这样的巧合
情况可能还有很多,比如:27* 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字
(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb* ce
这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,
并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,
所以答案肯定是个偶数。
答案直接通过浏览器提交。
注意:只提交一个表示最终统计种类数的数字,
不要提交解答过程或其它多余的内容。
答案:142
思路:假设a b c d e 代表1~9不同的5个数字,
a b c d e的范围在【1,9】,有多少种结果用ans累加法,
通过判断条件abcde=adbce满足条件累加1,
然后有一种可能就是a与b相等,
所以判断否定a不等于b,其他字母也一样。
***/
#include
int main(){
int sum=0,m,n;
int a,b,c,d,e;
for(a = 1;a<=9;a++){
for(b = 1;b<=9;b++){
for(c = 1;c<=9;c++){
for(d =1;d<=9;d++){
for(e =1;e<=9;e++){
m = (a*10+b)*(c*100+d*10+e);
n = (a*100+d*10+b)*(c*10+e);
if(m==n&&a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e){
sum++;
}
}
}
}
}
}
printf("一共%d种",sum);
return 0;
}
/***
上小学的时候,小明经常自己发明新算法。一次,
老师出的题目是: 1/4 乘以 8/5
小明居然把分子拼接在一起,分母拼接在一起,
答案是:18/45。
老师刚想批评他,转念一想,这个答案凑巧也对啊,
真是见鬼!
对于分子、分母都是 1~9 中的一位数的情况,
还有哪些算式可以这样计算呢? 请写出所有不同算式的个数
(包括题中举例的)。
显然,交换分子分母后,例如:4/1 乘以 5/8
是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,2/2 乘以 3/3
这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。
请通过浏览器提交。不要书写多余的内容。
答案:14
思路:其实跟上一道差不多,找出范围,找出判断条件,
找出不符合条件,利用累加ans
注意不可以用(a/b)*(c/d)==((a*10+c)/b*10+d)),
而是利用数学里面的十字相乘法
***/
#include
int main(){
int a,b,c,d;
int sum=0;
for(a=1;a<=9;a++){
for(b=1;b<=9;b++){
for(c=1;c<=9;c++){
for(d=1;d<=9;d++){
if(a==b&&c==d)
continue;
int e=a*10+c,f=b*10+d;
if(a*c*f==b*d*e){
sum++;
}
}
}
}
}
printf("%d",sum);
return 0;
}
/***
小蓝有一个超大的仓库,可以摆放很多货物。现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。
小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。
即在长、宽、高的方向上分别堆 L 、 W 、 H 的货物,满足 n = L × W × H。给定 n ,
请问有多少种堆放货物的方案满足要求。
例如,当 n = 4 时,有以下 6 种方案:1 × 1 × 4 、 1 × 2 × 2 、
1 × 4 × 1 、 2 × 1 × 2 、 2 × 2 × 1 、 4 × 1 × 1
请问,当 n = 2021041820210418 (注意有 16位数字)时,总共有多少种方案?
提示:建议使用计算机编程解决问题。
思路分析:循环暴力枚举解决法,理论上可以,可行性不行,
转换思路分解出整个数字的所有因(约)数,
然后对所有的因数暴力枚举两重循环,计
算出结果。
答案:2430
***/
#include
int hanshu(long long int a,long long int b,long long int c){
if(a==b&&a==c){//长=宽=高,一种排列组合
return 1;
}
if(a==b&&a!=c||a==c&&a!=b||b==c&&a!=b){//长宽高 任意两个相同排列只有三种
return 3;
}
else
return 6;//长宽高都不相同排列只有6种
}
int main(){
long long n=2021041820210418;
long long int L,W,H;
long long sum=0;
for(L=1;L*L*L<=n;L++){//L是最小的一方
if(n%L==0){
for(W=L;L*W*W<=n;W++){//L是第二大的一方,次数多
if(n%(L*W)==0){
H=n/L/W;
if(H>=W){
sum+=hanshu(L,W,H);
}
}
}
}
}
printf("%d",sum);
return 0;
}
#include
int main(){
int n;
scanf("%d",&n);
int i,count=0;
for(i=1;i<=n;i++){//约数包含1和本身
if(n%i==0)
count+=1;;
}
printf("%d",count);
return 0;
}
#include
int main(){
int i;
int count=0;
for(i=1;i<=2019;i++){
if(i/1000==9)
count++;
else if(i/100%10==9)
count++;
else if(i/10%10==9)
count++;
else if(i%10==9)
count++;
}
printf("%d",count);
return 0;
}
/***
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,
例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
***/
#include
int main(){
long int n;
scanf("%ld",&n);
int a,b,c,d,e,f; // 根据n的评测范围,定义6个长整型变量
int i,count=0;
for(i=1;i<=n;i++){
if(i<10){//1到9肯定都符合,但不能因此省略,否侧测试数据小于9就出错了
continue;
}
if(i>=10&&i<100){//2位数
a=i/10;//十位
b=i%10;//个位
if(a<=b){
count++;
continue;//该数符合条件后则返回进行下一个数的判断
}
}
if(i>=100&&i<1000)//3位数,以下思路同上
{
a=i/100;
b=i/10%10;
c=i%10;
if(a<=b&&b<=c)
{
count++;
continue;
}
}
if(i>=1000&&i<10000)//4位数
{
a=i/1000;
b=i/100%10;
c=i/10%10;
d=i%10;
if(a<=b&&b<=c&&c<=d)
{
count++;
continue;
}
}
if(i>=10000&&i<100000)//5位数
{
a=i/10000;
b=i/1000%10;
c=i/100%10;
d=i/10%10;
e=i%10;
if(a<=b&&b<=c&&c<=d&&d<=e)
{
count++;
continue;
}
}
if(i>=100000&&i<1000000)//6位数
{
a=i/100000;
b=i/10000%10;
c=i/1000%10;
d=i/100%10;
e=i/10%10;
f=i%10;
if(a<=b&&b<=c&&c<=d&&d<=e)
{
count++;
continue;
}
}
}
printf("%ld",count);
return 0;
}
#include
void hanoi(int n,char one,char two,char three){
void move(char x,char y);//声明函数
if(n==1)
move(one,three);
else{
hanoi(n-1,one,three,two);//将n-1个盘子从A借助C移到B
move(one,three);//将A上最后一个盘子移到C
hanoi(n-1,two,one,three);//将n-1个盘子从B借助A移到C
}
}
void move(char x,char y){
printf("%c-->%c\n",x,y);
}
int main(){
int m;
scanf("%d",&m);
hanoi(m,'A','B','C');
return 0;
}
#include
int main(){
int max(int x,int y);
int a[10],m,n,i;//n记录数组元素的序号
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
printf("\n");
for(i=1,m=a[0],n=0;i<10;i++){//先默认a[0]最大
if(max(m,a[i])>m){
m=max(m,a[i]);
n=i;
}
}
printf("最大数%d\n第%d位\n",m,n+1);
return 0;
}
int max(int x,int y){
return x>y?x:y;
}
#include
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
int c=gcd(a,b);
printf("%d\n",c);
printf("%d\n",a*b/c);//最小公倍数=a*b/最大公约数
return 0;
}
/***
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最
后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,
即需要 1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
***/
#include
int main(){
int i;
for(i =1;i<=2020;i++){
printf("%d ",i);
}
return 0;
}
//输出结果复制至文档,替换2即可,结果624
/***
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如,4/3,5/2,1/8,7/1都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?
***/
#include
#include
int main()
{
int n,m; //中间变量
int temi,temj;
int sum=0; //既约分数总数
for(int i=1; i<=2020; i++) //分子
{
for(int j=1; j<=2020; j++) //分母
{
temi=i; //暂存分子分母
temj=j;
if(temi<temj){
n=temi;
temi=temj;
temj=n;
}
while(temi%temj!=0) //大的在%左边,小的在%右边
{
m=temi%temj;
temi=temj;
temj=m;
}
if(temj==1){ //temj=1说明分子分母最大的公约数是1
sum++; //总数加1
}
}
}
printf("%d",sum);
return 0;
}
/***
***/
#include
int main(){
long long int n;
scanf("%lld",&n);
int hh,mm,ss;
n=n/1000;//去掉末尾毫秒
n=n%(3600*24);//去掉日期
hh=n/3600;//取出小时
n=n%3600;//去掉小时
mm=n/60;///取出分钟
ss=n%60; //去掉分钟
printf("%02d:%02d:%02d",hh,mm,ss);
return 0;
}
链接: https://space.bilibili.com/471791100/video?tid=0&page=2&keyword=&order=pubdate.
//杨辉三角形
/***
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
***/
#include
#define N 34
int main(){
int num[N][N]={{1},{1,1}};
int n,i,j;//行数 循环数
scanf("%d",&n);
//先生成数据
for(i = 2;i< n;i++){//行
num[i][0] = num[i][i]=1; //每行首尾为1
for(j = 1;j<i;j++){
num[i][j]=num[i-1][j-1]+num[i-1][j];
}
}
//再输出数据
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
printf("%d ",num[i][j]);
}
printf("\n");
}
return 0;
}
//序列求和 注意n的范围
/***
问题描述
求1+2+3+...+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+...+n的值。
样例输入
4
样例输出
10
样例输入
100
说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。
一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。
样例输出
5050
数据规模与约定
1 <= n <= 1,000,000,000。
***/
#include
int main(){
long long n;
scanf("%lld",&n);
long long i,sum=0;
for(i = 1;i <= n;i++)
sum = sum+i;
printf("%lld",sum);
return 0;
}
//查找整数
/***
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
***/
#include
#define N 1000
int main(){
int n,i,m,num[N] = {0};
int post = -1;//初始化位置
scanf("%d",&n);
for(i = 0;i < n;i++){
scanf("%d",&num[i]);
}
scanf("%d",&m);
for(i=0;i<n;i++){
if(num[i] == m){
post = i+1;
break;
}
}
printf("%d",post);
return 0;
}
//特殊的数字
/***
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。
编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
***/
#include
int main(){
int g,s,b;//个十百
int n;//循环遍变量
for(n = 100;n<=999;n++){
b = n/100;
s=n%100/10;
g=n%10;
if(b*b*b+s*s*s+g*g*g==n)
printf("%d\n",n);
}
return 0;
}
//回文数
/***
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
***/
#include
int main(){
int ge,shi,bai,qian,n;
for(n = 1000;n<=9999;n++){
qian = n/1000;
bai = n%1000/100;
shi=n%100/10;
ge=n%10;
if(qian==ge&&bai==shi)
printf("%d\n",n);
}
return 0;
}
//特殊回文数
/***
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
***/
#include
#define N 54
int main(){
int n,i;
scanf("%d",&n);
int ge,shi,bai,qian,wan,shiwan;
for(i=10000;i<=999999;i++){
shiwan = i/100000;
wan = i%100000/10000;
qian = i%10000/1000;
bai=i%1000/100;
shi=i%100/10;
ge=i%10;
if(i >=100000 && i <= 999999)
if(shiwan + wan+qian+bai+shi+ge==n && shiwan==ge && wan==shi && qian==bai )
printf("%d\n",i);
if(i >=10000 && i <= 99999)
if(wan+qian+bai+shi+ge==n && wan==ge && qian==shi )
printf("%d\n",i);
}
return 0;
}
//十进制转十六进制
/***
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,
分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,
而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
***/
//2147483647用程序员计算器转换是一个八位的字符串
#include
#define N 8//字符串长度
int main(){
int a,j;
int len=0;
int mod;
scanf("%d",&a);
char num[N];//转换后的16进制数组
if(a==0)
printf("0");
while(a!=0){
mod = a % 16;
if(mod>=0 && mod <=9)
num[len++]=mod+'0';
if(mod>=10&&mod<=15)
num[len++]=mod+'A'-10;
a=a/16;//辗转求余
}
for(j=len-1;j>=0;j--)
printf("%c",num[j]);
return 0;
}
/*** 法二
#include
int main(){
int n;
int mod;//取余
char str[100000];
int i=0,j;
scanf("%d",&n);
if(n == 0)
printf("0");
while(n != 0){
mod = n % 16;
if(mod >= 0 && mod <= 9)
str[i++] = mod + '0';
if(mod >= 10 && mod <= 15)
str[i++] = mod + 'A'- 10;
n = n/16;
}
for(j = i-1;j >= 0;j--)//倒叙输出
printf("%c",str[j]);
return 0;
}
***/
/***
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
***/
#include
#include
//检查一个整数是否是素数
int isprime(int n){
int result = 1;//默认是素数
int i;
for(i = 2;i<=sqrt(n);i++){
if(n%i==0){
result = 0;
break;
}
}
return result;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
int i,j,temp;
//遍历
for(i =a;i <=b;i++){
if(isprime(i))//如果是素数
printf("%d=%d\n",i,i);//输出自身
else {//不是素数 和数的求解(非质数) 8=2*2*2
temp = i;//临时变量记录;因为在运算过程中商的值不断变化,所以临时变量temp记录i作为除数和商
printf("%d=",temp);//开始输出,如8=
for(j=2;j<temp;j++){
if(isprime(j)){//循环变量j是素数
while(temp%j==0) {
printf("%d*",j);//计算过程
temp = temp/j;//商
if(isprime(temp))
{
printf("%d",temp);
break;
}
}
}
}
printf("\n");
}
}
return 0;
}
/***法二
#include
#include
int main()
{
int a,b,i,j;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++){
int n = i;
printf("%d=",n);//打印当前待分解的数
for(j=2;j*j <= n;j++){
while(n%j ==0){
//如果n可以被j整除,打印j的值,将n/j的商作为新的n,执行(1)
n = n/j;
printf("%d",j);
if(n!= 1){ //被除数不是1,还可以继续分解,打印乘号*
printf("*");
}
}
}
if(n != 1){
printf("%d",n);
}
printf("\n");
}
return 0;
}
***/
/***
//输出素数
#include
#include
int isprime(int n){
int result = 1;//默认是素数
int i;
for(i = 2;i <=sqrt(n);i++)
if(n %i ==0){
result = 0;
break;
}
return result;
}
int main(){
int n = 200;
int i;
for(i = 100;i<=n;i++){
if(isprime(i))
printf("%d\n",i);
}
return 0;
}
***/
/***时间转换
问题描述
给定一个以秒为单位的时间t,要求用“::”的格式来表示这个时间。
表示时间,表示分钟,而表示秒,它们都是整数且没有前导的“0”。
例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。
输入格式
输入只有一行,是一个整数t(0<=t<=86399)。
输出格式
输出只有一行,是以“::”的格式所表示的时间,不包括引号。
样例输入
0
样例输出
0:0:0
样例输入
5436
样例输出
1:30:36
***/
#include
int main(){
int t;
scanf("%d",&t);
int H,M,S;
if(t ==0){
H=M=S=0;
printf("%d:%d:%d",H,M,S);
}
else{
H = t/3600;
M=t%3600/60;
S=t%3600%60;
printf("%d:%d:%d",H,M,S);
}
return 0;
}
/***
问题描述
给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
1:两个字符串长度不等。比如 Beijing 和 Hebei
2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。
比如 beijing 和 BEIjing
4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
输入格式
包括两行,每行都是一个字符串
输出格式
仅有一个数字,表明这两个字符串的关系编号
样例输入
BEIjing
beiJing
样例输出
3
***/
#include
#include
#define N 10
int main(){
char num1[N],num2[N];
int i,k=0;
scanf("%s",&num1);
scanf("%s",&num2);
int len1 = strlen(num1);
int len2 = strlen(num2);
if(len1!=len2)
printf("1");
else{
if(strcmp(num1,num2)==0)
printf("2");
else{
for(i =0;i<N;i++){
if((num1[i]==num2[i]+32||num1[i]==num2[i]-32||num1[i]==num2[i])&&num1[i]!='\0')
//if(num1[i]==num2[i]+32||num1[i]==num2[i]-32||num1[i]==num2[i])
k++;
}
if(k==len1)
printf("3");
else
printf("4");
}
}
return 0;
}
/*** 法二 :75分
#include
#include
#include//字符串操作
#define N 10
//比较字符串,不区分大小写的情况
int mystrcmp(char a[N],char b[N]){
int result = 1;//默认为1 相同
int i;
int len = strlen(a);
for(i = 0 ;i < len;i++){
if(tolower(a[i])!=tolower(b[i]))
result = 0;
break;
}
return result;
}
int main(){
char num1[N];
char num2[N];
int a,b,c,d;//代表1,2,3,4种情况
int i;
scanf("%s",&num1);
scanf("%s",&num2);
int len1 = strlen(num1);
int len2 = strlen(num2);
//第一种情况
if(len1 != len2){
printf("1\n");
}
else{
if(strcmp(num1,num2)==0)
printf("2");
else if(mystrcmp(num1,num2)==1){
printf("3");
}
else{
printf("4");
}
}
//printf("%s\n%s\n%d %d",num1,num2,len1,len2);
return 0;
}
***/
/***
问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22
***/
//33分?
#include
#define N 30
#define M 5
int main(){
int n,m;
scanf("%d %d",&n,&m);
int i,j;//循环变量
int num[N][N]={0};//输入的矩阵
int temp[N][N]={0}; //临时变量计算结果
int temp1[N][N]={0};//临时变量存储每一次的计算结果
int k,p;//循环变量
//二维数组的输入
for(i = 0;i< n;i++){
for(j = 0;j<n;j++){
scanf("%d",&num[i][j]);
temp[i][j] = num[i][j];
}
}
//计算次幂
if(m == 0){//0次幂,单位矩阵
for(i = 0;i< n;i++){
for(j = 0;j<n;j++){
if(i==j)//对角线上
temp[i][j]=1;
else
temp[i][j]=0;
}
}
}
else{//非0次幂
for(k = 1;k<m;k++){//乘方进行遍历
for(i = 0;i < n;i++){
for(j = 0;j<n;j++){
temp1[i][j] = 0;
for(p = 0;p <n;p++){
temp1[i][j] += (temp[i][p]*temp[p][j]); //当前行当前列*当前列任意行
}
}
}
}
//把temp1赋值给temp
for(i = 0;i< n;i++){
for(j = 0;j<n;j++){
temp[i][j] = temp1[i][j];
}
}
}
//输出结果
for(i = 0;i< n;i++){
for(j = 0;j<n;j++){
printf("%d ",temp[i][j]);
}
printf("\n");
}
return 0;
}
/***
问题描述
有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多。
每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。
给出所有芯片的测试结果,问哪些芯片是好芯片。
输入格式
输入数据第一行为一个整数n,表示芯片个数。
第二行到第n+1行为n*n的一张表,每行n个数据。表中的每个数据为0或1,在这n行中的第i行第j列(1≤i, j≤n)的数据表示用第i块芯片测试第j块芯片时得到的测试结果,1表示好,0表示坏,i=j时一律为1(并不表示该芯片对本身的测试结果。芯片不能对本身进行测试)。
输出格式
按从小到大的顺序输出所有好芯片的编号
样例输入
3
1 0 1
0 1 0
1 0 1
样例输出
1 3
***/
#include
#define N 20
int main(){
int n;//芯片个数
scanf("%d",&n);
int num[N][N];
int sum[20]={0};
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&num[i][j]);
if(num[i][j] == 1){
sum[j]++;//统计合格芯片的次数
}
}
}
for(i=1;i<=n;i++){
if(sum[i]>n/2)//合格次数大于n/2芯片
{
printf("%d ",i);
}
}
return 0;
}
/***
问题描述
同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。
暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,
看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,
他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,
将整个操场按正方形铺砖
(整个操场可视为R行C列的矩阵,矩阵的每个元素为一块正方形砖块),
正方形砖块有两种,一种为蓝色,另一种为红色。
我们定义他和她之间的“爱情指标”为最大纯色正方形的面积,
请你写一个程序求出“爱情指标”。
输入格式
第一行两个正整数R和C。
接下来R行C列描述整个操场,红色砖块用1来表示,蓝色砖块用0来表示。
输出格式
一个数,表示他和她之间的“爱情指标”。
样例输入
5 8
0 0 0 1 1 1 0 1
1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1
1 0 1 1 1 1 1 0
1 1 1 0 1 1 0 1
样例输出
9
数据规模和约定
40%的数据R,C<=10;
70%的数据R,C<=50;
100%的数据R,C<=200;
***/
#include
#define N 200
#define M 200
int m,n;
int num[N][M];
//找出面积最大的正方形
int max(int a,int b){
return a>b?a:b;
}
int find(int x,int y){
int result;
int i,j;
for(result = 2;x+result-1<m&&y+result-1<n;result++){
for(i=x;i<=x+result-1;i++){
if(num[i][y+result-1] != num[x][y])
return (result-1)*(result-1);
}
for(j=y;j<=y+result-1;j++){
if(num[x+result-1][j] != num[x][y])
return (result-1)*(result-1);
}
}
return (result-1)*(result-1);
}
int main(){
//int m,n;
scanf("%d %d",&m,&n);//m行n列
int i,j;//循环变量
//int num[N][M];
for(i = 0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&num[i][j]);
}
}
int max_area =1;
for(i = 0;i<m;i++){
for(j =0;j<n;j++){
max_area=max(max_area,find(i,j));
}
}
printf("%d",max_area);
return 0;
}
/***
编写函数,判断某个给定字符是否为数字。
样例输入
9
样例输出
yes
***/
#include
int main(){
char n;
scanf("%c",&n);
if(n>='0'&&n<='9')
printf("yes");
else
printf("no");
return 0;
}
/***
编写函数把一个十进制数输出其对应的八进制数。
样例输入
9274
样例输出
22072
***/
#include
int main(){
int t;
scanf("%d",&t);
printf("%o",t);
return 0;
}
/***
输入两个点的坐标,即p1 = (x1, y1)和p2=(x2, y2),求过这两个点的直线的斜率。如果斜率为无穷大输出“INF”。
样例输入
1 2
2 4
样例输出
2
样例输入
1 2
1 4
样例输出
INF
样例输入
1 2
3 2
样例输出
0
***/
#include
int main()
{
int a,b,c,d;
scanf("%d%d",&a,&b);
scanf("%d%d",&c,&d);
if(a==c)
printf("INF\n");
else
printf("%d\n",(b-d)/(a-c));
return 0;
}
/***
/***
问题描述
编写一个程序,计算员工的周薪。薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水。如果员工工作的时间在40 到50 个小时之间,那么对于前40 个小时,仍按常规方法计算;而对于剩余的超额部分,每小时的薪水按1.5 倍计算。如果员工工作的时间超过了50 个小时,那么对于前40 个小时,仍按常规方法计算;对于40~50 个小时之间的部分,每小时的薪水按1.5 倍计算;而对于超出50 个小时的部分,每小时的薪水按2 倍计算。请编写一个程序,输入员工的工作时间和每小时的薪水,然后计算并显示他/她应该得到的周薪。
输入格式:输入只有一行,包括一个整数和一个实数,分别表示工作时间和每小时薪水。
输出格式:输出只有一个实数,表示周薪,保留小数点后2位。
输入输出样例
样例输入
40 50
样例输出
2000.00
***/
#include
int main(){
int t;
float m;
scanf("%d %f",&t,&m);
if(t>=0&&t<=40){
printf("%.2f",t*m);
}
else{
t=t-40;
if(t<=10){
printf("%.2f",t*m*1.5+40*m);
}
else{
t=t-10;
printf("%.2f",t*m*2+10*m*1.5+40*m);
}
}
return 0;
}
/***
问题描述
编写一个程序,输入三个正整数min、max和factor,然后对于min到max之间的每一个整数(包括min和max),如果它能被factor整除,就把它打印出来。
输入格式:输入只有一行,包括三个整数min、max和factor。
输出格式:输出只有一行,包括若干个整数。
输入输出样例
样例输入
1 10 3
样例输出
3 6 9
***/
#include
int main(){
int min,max,factor;
scanf("%d %d %d",&min,&max,&factor);
int i;
for(i=min;i<=max;i++){
if(i%factor==0)
printf("%d ",i);
}
return 0;
}
/***
问题描述
能被2整除的数称为偶数,不能被2整除的数称为奇数。给一个整数x,判断x是奇数还是偶数。
输入格式
输入包括一个整数x,0<=x<=100000000。
输出格式
如果x是奇数,则输出“odd”,如果是偶数,则输出“even”。
样例输入
10
样例输出
even
样例输入
2009
样例输出
odd
***/
#include
int main(){
int n;
scanf("%d",&n);
if(n%2==0)
printf("even");
else
printf("odd");
return 0;
}
/***
问题描述
输入正整数a, m,输出a^2%m,其中^表示乘方,即a^2表示a的平方,%表示取余。
输入格式
输入包含两个整数a, m,a不超过10000。
输出格式
输出一个整数,即a^2%m的值。
样例输入
5 6
样例输出
1
***/
#include
int main(){
int a,m;
scanf("%d %d",&a,&m);
printf("%d",a*a%m);
return 0;
}
/***
编程将两个字符串连接起来。例如country与side相连接成为countryside。
输入两行,每行一个字符串(只包含小写字母,长度不超过100);输出一行一个字符串。
样例输入
country
side
样例输出
countryside
***/
#include
#include
#define N 200
int main(){
char a[N],b[N];
scanf("%s",&a);
scanf("%s",&b);
printf("%s",strcat(a,b));
return 0;
}
/***
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6就是“完数”。又如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28也是“完数”。编写一个程序,判断用户输入的一个数是否为“完数”。
输入格式:输入只有一行,即一个整数。
输出格式:输出只有一行,如果该数为完数,输出yes,否则输出no。
输入输出样例
样例输入
6
样例输出
yes
***/
#include
int main(){
int n,i,sum=0;
scanf("%d",&n);
for(i = 1;i<n;i++){
if(n%i==0){
sum=sum+i;
}
}
if(sum==n){
printf("yes\n");
}
else{
printf("no\n");
}
return 0;
}
/***
这里写问题描述。
打印出1-1000所有11和17的公倍数。
***/
#include
int main(){
int i;
for(i=1;i<=1000;i++){
if(i%11==0&&i%17==0)
printf("%d\n");
}
return 0;
}
/***
问题描述
给定一个十进制整数,返回其对应的二进制数的位数。例如,输入十进制数9,其对应的二进制数是1001,因此位数是4。
样例输入
一个满足题目要求的输入范例。
9
***/
#include
int main(){
int n;
scanf("%d",&n);
int i=0;
while(n > 0){
n/=2;
i++;
}
printf("%d",i);
return 0;
}
/***
问题描述
给定实数x,输出sign(x)的值。
sign(x)是符号函数,如果x>0,则返回1;如果x=0,则返回0;如果x<0,则返回-1。
输入格式
一行一个实数x。
输出格式
一行一个整数表示答案。
样例输入
-0.0001
样例输出
-1
***/
#include
int main(){
double n;
scanf("%lf",&n);
if(n>0)
printf("1");
else if(n==0)
printf("0");
else
printf("-1");
return 0;
}
/***
从键盘输入一个大写字母,要求改用小写字母输出。
输入
A
输出
a
***/
#include
int main(){
char n;
scanf("%c",&n);
printf("%c",n+32);
return 0;
}
/***
问题描述
编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。
输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
输出格式:输出经过转换后的字符串。
输入输出样例
样例输入
AeDb
样例输出
aEdB
***/
#include
#include
#define N 20
int main(){
char num[N];
int i;
scanf("%s",&num);
int len;
len =strlen(num);
for(i=0;i<len;i++){
if(num[i]>='a'&&num[i]<='z')
num[i]=num[i]-32;
else
num[i]=num[i]+32;
}
printf("%s",num);
return 0;
}
/***
一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。
阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;
而35!就更大了,它已经无法存放在一个浮点型变量中。
因此,当n比较大时,去计算n!是非常困难的。
幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。
例如,5!=1*2*3*4*5=120,因此5!最右边的那个非0的数字是2。
再如,7!=5040,因此7!最右边的那个非0的数字是4。
再如,15!= 1307674368000,因此15!最右边的那个非0的数字是8。
请编写一个程序,输入一个整数n(0
#include
int main(){
int n;
scanf("%d",&n);
int i;
long long sum=1;
for(i=1;i<=n;i++){
sum = sum*i;
while(sum%10==0){
sum/=10;
}
sum=sum%1000;
}
printf("%lld",sum%10);
return 0;
}
/***
问题描述
输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。
输入格式
一个正整数n
输出格式
一个整数,表示1出现的资料
样例输入
15
样例输出
8
数据规模和约定
n不超过30000
***/
#include
int main(){
int n;
scanf("%d",&n);
int i;
int count = 0;
for(i=1;i<=n;i++){
int m=i;
while(m!=0) {
if(m%10==1)
{
count=count+1;
}
m/=10;
}
}
printf("%d",count);
return 0;
}
/***
问题描述
输出大等于n的最小的完全平方数。
若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数
Tips:注意数据范围
输入格式
一个整数n
输出格式
大等于n的最小的完全平方数
样例输入
71711
样例输出
71824
数据规模和约定
n是32位有符号整数
***/
#include
#include
int main(){
int n;
scanf("%d",&n);
long long int root = ceil(sqrt(n));
printf("%lld",root*root);
return 0;
}
/***
企业发放的奖金根据利润提成。
利润低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万元到60万元之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%;
高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润,求应发放奖金总数?(保留两位小数)利润的大小在double以内
样例输入
210000
样例输出
18000.00
***/
#include
int main(){
double n;
scanf("%lf",&n);
double sum;
if(n<=100000){
sum=n*0.1;
printf("%.2lf",sum);
}
else if(n>100000&&n<200000){
sum=100000*0.1+(n-100000)*0.075;
printf("%.2lf",sum);
}
else if(n>=200000&&n<400000){
sum=100000*0.1+100000*0.075+(n-200000)*0.05;
printf("%.2lf",sum);
}
else if(n>=400000&&n<600000){
sum=100000*0.1+100000*0.075+200000*0.05+(n-400000)*0.03;
printf("%.2lf",sum);
}
else if(n>=600000&&n<1000000){
sum=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(n-600000)*0.015;
printf("%.2lf",sum);
}
else{
sum=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(n-1000000)*0.01;
printf("%.2lf",sum);
}
return 0;
}
/***
输入一元一次方法的ax+b=0的解。且数据均在double类型以内,且一定有解(保留2位小数)
样例输入
2 6
样例输出
-3.00
***/
#include
int main(){
double a,b;
scanf("%lf %lf",&a,&b);
printf("%.2lf",(-b)/a);
return 0;
}
/***
问题描述
首先给出简单加法算式的定义:
如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,
则称其为简单的加法算式。
例如:i=3时,3+4+5=12,有一个进位,因此3+4+5不是一个简单的加法算式;
又如i=112时,112+113+114=339,没有在任意数位上产生进位,
故112+113+114是一个简单的加法算式。
问题:给定一个正整数n,问当i大于等于0且小于n时,有多少个算式(i)+(i+1)+(i+2)是简单加法算式。其中n<10000。
输入格式
一个整数,表示n
输出格式
一个整数,表示简单加法算式的个数
样例输入
4
样例输出
3
***/
#include
int main(){
int n;
scanf("%d",&n);
int count=0;
int i;
for(i=0;i<n;i++){
int a,b,c,d; //n<10000
a=i%10;
b=i/10%10;
c=i/100%10;
d=i/1000;
if(a<=2&&b<=2&&c<=2&&d<=2)//最大不能超过9
count++;
}
printf("%d",count);
return 0;
}
/***
问题描述
比较两个字符串s1和s2,输出:0表示s1与s2相等;1表示s1的字母序先于s2;-1表示s1的字母序后于s2
输入格式
输入两行,第一行输入一个字符串1,第二行输入字符串2。
输出格式
输出比较的结果
样例输入
abc
abd
样例输出
1
样例输入
English
English
样例输出
0
样例输入
hello
ha
样例输出
-1
***/
#include
#include
#define N 10000
int min(char num1[N],char num2[N]){
return strlen(num1)>strlen(num2)?strlen(num2):strlen(num1);
}
int main(){
char num1[N];
char num2[N];
int i,k=0,p=0;
scanf("%s",&num1);
scanf("%s",&num2);
if(strcmp(num1,num2)==0){
printf("0");
}
else{
for(i =0;i < min(num1,num2);i++)
{
if(num1[i]<=num2[i])
k++;
if(num1[i]>=num2[i])
p++;
}
}
if(k==strlen(num1)||k==strlen(num2))
printf("1");
if(p==strlen(num1)||p==strlen(num2))
printf("-1");
return 0;
}
/***法二
#include
#include
int main(){
char s1[100],s2[100];
scanf("%s%s",s1,s2);
int i;
for(i=0;is2[i]){//s2先序输出-1直接退出程序
printf("-1");
return 0;
}
}
printf("0");//否则输出0
return 0;
}
***/
/***
问题描述
编写递归函数,将组成整数的所有数字逐个输出,每个数字后面加上一个减号“-”,
例如对于整数123,该函数将输出1-2-3- 。编写主函数测试该递归函数。
输入格式
输入一个整数n
输出格式
如题目要求,把n的每个数字后面加一个减号”-“输出
样例输入
一个满足题目要求的输入范例。
例:
123
样例输出
与上面的样例输入对应的输出。
例:
1-2-3-
数据规模和约定
输入n>0,必须使用递归调用来实现!
***/
#include
int digui(int n){
if(n==0)
return 0;
digui(n/10);
printf("%d-",n%10);
}
int main(){
int n;
scanf("%d",&n);
digui(n);
return 0;
}
/***
输入一个正整数N (1
样例输入
12
样例输出
6
样例说明
12的约数包括:1,2,3,4,6,12。共6个
***/
#include
int main(){
int n;
scanf("%d",&n);
int i,count = 0;
for(i = 1;i<=n;i++){
if(n% i==0)
{
count++;
}
}
printf("%d",count);
return 0;
}
/***
问题描述
试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?
例如,在 1到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
输入格式
输入文件名为 count.in。
输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。
输出格式
输出文件名为 count.out。
输出共 1 行,包含一个整数,表示 x 出现的次数。
输入输出样例
count.in count.out
11 1 4
数据说明
对于 100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
***/
#include
int main(){
int n,x;
scanf("%d %d",&n,&x);
int count =0;
int i;
int temp;
for(i=1;i<=n;i++){
temp =i;
while(temp!=0){
if(temp%10==x)
count++;
temp/=10;
}
}
printf("%d",count);
return 0;
}
/***
编制程序完成下述任务:接受两个数,一个为用户一年期定期存款金额,一个为按照百分比格式表示的利率;程序计算一年期满
后本金与利息总额。说明:(1)存款金额以人民币元为单位,可能精确到分;
(2)输入利率时不需要输入百分号,例如一年期定期存款年利率
为2.52%,用户输入2.52即可;
(3)按照国家法律,存款利息所得需缴纳20% 的所得税,计算结果时所得税部分应扣除。要求输出小数点后严格
保留两位小数。
样例输入
10000 2.52
样例输出
10201.60
***/
#include
int main(){
double a,b,sum;
scanf("%lf %lf",&a,&b);
sum=a+(a*b*1*0.01*0.8);
printf("%.2f\n",sum);
return 0;
}
/***
问题描述
小于10的自然数中有四个数字能除尽3或5(3, 5, 6, 9),它们的和为23。
请计算所有小于1000的自然数中能除尽3或5的数字的合。然后使用标准输出cout,输出你的结果。
输入格式
无。
输出格式
一行一个整数,表示你的结果。
***/
#include
int main(){
int i;
int sum=0;
for(i=0;i<1000;i++){
if(i%3==0||i%5==0){
sum+=i;
}
}
printf("%d",sum);
return 0;
}
/***
问题描述
?输入三个数,比较其大小,并从大到小输出。
输入格式
一行三个整数。
输出格式
一行三个整数,从大到小排序。
样例输入
33 88 77
样例输出
88 77 33
***/
#include
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int max;
if(a<b){
max = a;
a=b;
b=max;
}
if(a<c)
{
max = a;
a=c;
c=max;
}
if(b<c){
max = b;
b=c;
c=max;
}
printf("%d %d %d",a,b,c);
return 0;
}
/***
问题描述
勾股数是一组三个自然数,a < b < c,以这三个数为三角形的三条边能够形成一个直角三角形
输出所有a + b + c <= 1000的勾股数
a小的先输出;a相同的,b小的先输出。
输出格式
每行为一组勾股数,用空格隔开
样例输出
例如,结果的前三行应当是
3 4 5
5 12 13
6 8 10
***/
#include
int main(){
int a,b,c;
for(a=3;a<1000;a++)
for(b=a;b<1000;b++)
for(c=b;c<1000;c++)
if(a*a+b*b==c*c&&a+b+c<=1000)
printf("%d %d %d\n",a,b,c);
return 0;
}
/***
问题描述
按格式格式读入一个3位的整数、一个实数、一个字符 。
并按格式输出 一个整数占8位左对齐、一个实数占8位右对齐、一个字符 ,并用|隔开。
输入格式
见题面
输出格式
见题面
样例输入
123456.789|a
样例输出
123 | 456.8|a
***/
#include
int main(){
int a;
double b;
char c;
scanf("%3d%lf|%c",&a,&b,&c);
printf("%-8d|%8.1f|%c\n",a,b,c);
return 0;
}
/***
问题描述
税务局希望你帮他们编写一个征税程序,该程序的功能是:首先输入某公司的年销售额sale和税率rate,然后程序将计算出相应的税额tax,并把它显示在屏幕上。计算公式是:
tax = sale * rate。
输入格式:输入只有一行,包括两个数据,即年销售额和税率。
输出格式:输出只有一行,包括一个实数,即相应的税额,保留到小数点后两位。
输入输出样例
样例输入
50000.5 0.1
样例输出
5000.50
***/
#include
int main(){
double a,b;
scanf("%lf %lf",&a,&b);
double n;
n=a*b;
printf("%.2lf",n);
return 0;
}
/***
编写一程序,接受用户输入的两个整数,并计算它们的和、差、
积、商,程序运行时候输入输出例子如下所示。
样例输入:
3 5
样例输出:
3+5=8
3-5=-2
3*5=15
3/5=0
注意:输出要严格按照+-/的顺序,分四行输出,而且中间不能有空格,否则系统会判为错误。
***/
#include
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
printf("%d-%d=%d\n",a,b,a-b);
printf("%d*%d=%d\n",a,b,a*b);
printf("%d/%d=%d\n",a,b,a/b);
return 0;
}
/***
编程计算涂满高为2,半径为r的圆形蛋糕表面,需要多少表面积的奶油(只要涂上表面和侧面)
读入一个数r,输出需要奶油的表面积,结果保留一位小数
样例输入
5.0
样例输出
141.4
***/
#include
#define PI 3.1415926
int main(){
double r;
scanf("%lf",&r);
printf("%.1lf",4*r*PI+PI*r*r);
return 0;
}
/***
输入一个正整数(范围[1..10000]),打印其平方(不保留小数位)、uu 平方根、倒数。(用指针实现,保留2位小数,输出每个数之间以一个空格隔开)
样例输入
2
样例输出
4 1.41 0.50
***/
#include
#include
int main(){
int n;
scanf("%d",&n);
int *m=&n;
printf("%d ",(*m)*(*m));
printf("%.2lf ",sqrt(*m));
printf("%.2lf",1.0/(*m));
return 0;
}
/***
有4个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。(保留2位小数)
括号里是解释内容,不用输入输出。输入的所有数都为0到100之间(包括端点)的整数
样例输入
(输入第1个学生的4门课成绩) 94 78 87 96
(输入第2个学生的4门课成绩) 66 87 75 69
(输入第3个学生的4门课成绩)100 98 89 77
(输入第4个学生的4门课成绩) 82 73 67 54
样例输出
(第1门课的平均成绩是) 85.50
(第2门课的平均成绩是) 84.00
(第3门课的平均成绩是) 79.50
(第4门课的平均成绩是) 74.00
***/
#include
#define N 4
int main(){
double num[N][N];
int i,j;
for(i =0;i<N;i++){
for(j = 0;j<N;j++){
scanf("%lf",&num[i][j]);
}
}
for(i=0;i<N;i++){
printf("%.2lf\n",(num[0][i]+num[1][i]+num[2][i]+num[3][i])/4.0);
}
return 0;
}
/***
输入n分钟换算成天、小时和分输出。例如4880分钟,可换算成3天9小时20分。
输入一个正整数n(1
样例输入
4880
样例输出
3 9 20
***/
#include
int main(){
int n;
scanf("%d",&n);
int day=n/1440;//天数
int h = n%1440/60;
int m=n%1440%60;
printf("%d %d %d",day,h,m);
return 0;
}
/***
输入3个整数a、b、c,(数的范围是[1,10000])输出其中最大的数。(用指针实现)
样例输入
2 5 1
样例输出
5
***/
#include
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int *max;
if(a>b&&a>c)
max = &a;
if(b>a&&b>c)
max = &b;
if(c>a&&c>b)
max = &c;
printf("%d\n",*max);
return 0;
}
/***
编写一个C程序,输入一个整数摄氏温度,输出相应的华氏温度。在输出时,保留小数点后面两位。
样例输入
0
样例输出
32.00
***/
#include
int main(){
double n;
scanf("%lf",&n);
double sum=n*1.8+32;
printf("%.2lf",sum);
return 0;
}
/***
问题描述
求解方程ax2+bx+c=0的根。要求a, b, c由用户输入,并且可以为任意实数。
输入格式:输入只有一行,包括三个系数,之间用空格格开。
输出格式:输出只有一行,包括两个根,大根在前,小根在后,无需考虑特殊情况,保留小数点后两位。
输入输出样例
样例输入
2.5 7.5 1.0
样例输出
-0.14 -2.86
***/
#include
#include
int main(){
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
double x=((-b)+sqrt(b*b-4*a*c))/(2*a);
double y=((-b)-sqrt(b*b-4*a*c))/(2*a);
if(x>y){
printf("%.2lf %.2lf",x,y);
}
else{
printf("%.2lf %.2lf",y,x);
}
return 0;
}
/***
使用Switch语句编写一个模拟简单计算器的程序。
依次输入两个整数和一个字符,并用空格隔开。
如果该字符是一个“+”,则打印和;
如果该字符是一个“-”,则打印差;
如果该字符是一个“*”,则打印积;
如果该字符是“/”,则打印商;
如果该字符是一个“%”,则打印余数。
打印结果后输出一个空行。
***/
#include
int main(){
int a,b;
char c;
scanf("%d %d %c",&a,&b,&c);
switch(c){
case'+':
printf("%d\n",a+b);break;
case'-':
printf("%d\n",a-b);break;
case'*':
printf("%d\n",a*b);break;
case'/':
printf("%d\n",a/b);break;
case'%':
printf("%d\n",a%b);break;
}
return 0;
}
/***
写程序实现“剪刀,石头,布”游戏。
在这个游戏中,两个人同时说“剪刀”,“石头”或“布”,
压过另一方的为胜者。规则是:“布”胜过“石头”,
“石头”胜过“剪刀”,“剪刀”胜过“布”。
要求:选择结构中使用枚举类型,结果的输出也使用枚举类型表示。
输入:两个数,范围为{0,1,2},用空格隔开。
0表示石头,1表示布,2表示剪刀。这两个数分别表示两个人所说的物品。
输出:如果前者赢,输出1。如果后者赢,输出-1。如果是平局,输出0。
***/
#include
int main(){
int a,b;
scanf("%d %d",&a,&b);
if(a==b){
printf("0");
}
else{
if(a==0){
if(b==1)
printf("-1");
if(b==2)
printf("1");
}
if(a==1){
if(b==0)
printf("1");
if(b==2)
printf("-1");
}
if(a==2){
if(b==0)
printf("-1");
if(b==1)
printf("1");
}
}
return 0;
}
/***
编写函数GetReal和GetString,在main函数中分别调用这两个函数。在读入一个实数和一个字符串后,将读入的结果依次用printf输出。
两次输入前要输出的提示信息分别是"please input a number:\n”和"please input a string:\n"
样例输入
9.56
hello
样例输出
please input a number:
please input a string:
9.56
hello
***/
#include
double GetReal(){
double n;
scanf("%lf",&n);
return n;
}
void GetString(char a[]){
getchar();
gets(a);
}
int main(){
double n;
char a[1000];
printf("please input a number:\n");
n=GetReal();
printf("please input a string:\n");
GetString(a);
printf("%.2lf\n",n);
puts(a);
return 0;
}
/***
问题描述
输出1~100间的质数并显示出来。注意1不是质数。
输出格式
每行输出一个质数。
2
3
...
97
***/
#include
int main(){
int i;
for(i=2;i<=100;i++){
int j,sum=0;
for(j=1;j<i;j++){
if(i%j==0)
{
sum++;
}
}
if(sum==1){
printf("%d\n",i);
}
}
return 0;
}
/***
问题描述
编写一个程序,接受用户输入的10个整数,输出它们的和。
输出格式
要求用户的输出满足的格式。
例:输出1行,包含一个整数,表示所有元素的和。
样例输入
1 2 3 4 5 6 7 8 9 10
样例输出
55
数据规模和约定
输入数据中每一个数的范围。
例:输入数<100000。
***/
#include
#define N 10
int main(){
int a[N];
int i,sum=0;
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
for(i=0;i<N;i++){
sum=sum+a[i];
}
printf("%d",sum);
return 0;
}
/***法二
#include
int main()
{
int a=10;
int sum=0;
while(a-->0)
{
int n;
scanf("%d",&n);
sum+=n;
}
printf("%d\n",sum);
return 0;
}
***/
/***
输入一个无符号整数x,输出x的二进制表示中1的个数.
输入:
76584
输出:
7
***/
#include
int main(){
unsigned int x;
scanf("%d",&x);
int count =0;
while(x){
if(x&1)//位与运算
count++;
x>>=1;//右移判断是否为1
}
printf("%d\n",count);
return 0;
}
/***
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第十天早上想在吃时就只剩下一个桃子了。
求第一天共摘了多少桃子。
(下面的不是正确答案)
输出:
8
***/
#include
int main(){
int n=1,i;
for(i=0;i<9;i++)
n=(n+1)*2;
printf("%d",n);
return 0;
}
/***
编写一个程序,利用强制类型转换打印元音字母大小写10种形式的ASCII码。
输出的顺序为:大写的字母A,E,I,O,U的ASCII码,小写的字母a,e,i,o,u的ASCII码。
所有的ASCII码都用十进制表示.输出10行,每行一个ASCII码,最后输出一个空行。
***/
#include
#define N 10
int main(){
char a[10]={'A','E','I','O','U','a','e','i','o','u'};
int i;
for(i=0;i<10;i++){
printf("%d\n",(int)a[i]);
}
printf("\n");
return 0;
}
/***
问题描述
使用宏实现计算球体体积的功能。用户输入半径,系统输出体积。不能使用函数,pi=3.1415926,结果精确到小数点后五位。
样例输入
一个满足题目要求的输入范例。
例:
1.0
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
数据表示采用double类型。
***/
#include
#define pi 3.1415926
int main(){
double r;
scanf("%lf",&r);
double area=(4*pi*r*r*r)/3;
printf("%.5lf",area);
return 0;
}
/***
问题描述
利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],
返回值为[0, PI]。要求结果准确到小数点后5位。(PI = 3.1415926)
提示:要达到这种程度的精度需要使用double类型。
样例输入
0.5
样例输出
数据规模和约定
-1 <= x <= 1, 0 <= arccos(x) <= PI。
***/
#include
#include
int main(){
double x;
scanf("%lf",&x);
printf("%0.5lf",acos(x));
return 0;
}
/***
一个水分子的质量是3.0*10-23克,一夸脱水的质量是950克。写一个程序输入水的夸脱数n(0 <= n <= 1e10),然后输出水分子的总数。
输入
109.43
输出
3.465283E+027
***/
#include
int main(){
double n;
scanf("%lf",&n);
double s=3E-23/950;
double sum =n/s;
printf("%E",sum);
return 0;
}
/***
问题描述
有一天,JOE终于不能忍受计算a^b%c这种平凡的运算了。
所以他决定要求你写一个程序,计算a^b%c。
提示:若b为奇数,,a^b=(a^(b/2))^2*a,否则a^b=(a^(b/2))^2。
输入格式
三个非负整数a,b,c;
输出格式
一个整数ans,表示a^b%c;
样例输入
7 2 5
样例输出
4
数据规模和约定
30% a <= 100, b <= 10^4, 1 <= c <= 100
60% a <=10^4, b <= 10^5, 1 <= c <= 10^4
100% a <=10^6, b <= 10^9, 1 <= c <= 10^6
***/
#include
int main(){
long long int a,b,c;
scanf("%lld %lld %lld",&a,&b,&c);
a=a%c;
long long int sum = 1;
while(b){
if(b%2==1)//b为奇数
sum=(sum*a)%c;
b/=2;
a=(a*a)%c;
}
printf("%lld",sum);
return 0;
}
/***
编写一函数gcd,求两个正整数的最大公约数。
样例输入:
5 15
样例输出:
5
样例输入:
7 2
样例输出:
1
***/
#include
int main(){
int m,n;
scanf("%d %d",&m,&n);
int s;
while((s=m%n)!=0){
m=n;
n=s;
}
printf("%d\n",n);
return 0;
}
/***
问题描述
Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson。现 在,刚刚放学回家的Hankson 正在思考一个有趣的问题。 今天在课堂上,老师讲解了如何求两个正整数c1 和c2 的最大公约数和最小公倍数。现 在Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公 倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整 数x 满足: 1. x 和a0 的最大公约数是a1; 2. x 和b0 的最小公倍数是b1。 Hankson 的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的 x 并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x 的个数。请你帮 助他编程求解这个问题。
输入格式
输入第一行为一个正整数n,表示有n 组输入数据。
接下来的n 行每 行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入 数据保证a0 能被a1 整除,b1 能被b0 整除。
输出格式
输出共n 行。每组输入数据的输出结果占一行,为一个整数。
对于每组数据:若不存在这样的 x,请输出0; 若存在这样的 x,请输出满足条件的x 的个数;
样例输入
2
41 1 96 288
95 1 37 1776
样例输出
6
2
样例说明
第一组输入数据,x 可以是9、18、36、72、144、288,共有6 个。
第二组输入数据,x 可以是48、1776,共有2 个。
数据规模和约定
对于 50%的数据,保证有1≤a0,a1,b0,b1≤10000 且n≤100。
对于 100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。
思路:由题意知x的范围在1~b1之间,所以可以从1~b1进行枚举,如果gcd(x,a0)==a1且lcm(x,b0)==b1就cnt++
for(x=0;x<=b1;x++){
if((gcd(x,a0)==a1)&&(lcm(x,b0)==b1)){
cnt++;
}
}
这样会超时。
因为a1是x,a0的最大公因数,b1是x,b0的最小公倍数
所以满足条件的x一定是b1的因数,a1的倍数
所以仅需枚举b1的因数:当得到b1的一个因数时,它的另一个因数也就确定了,所以只需枚举到sqrt(b1)即可
需要注意数据的范围
***/
#include
long long int gcd(long long int a,long long int b){//最大公约数
return b==0?a:gcd(b,a%b);
}
long long int lcm(long long int a,long long int b){//最小公倍数
return a*b/gcd(a,b); //a*b/最大公约数
}
int main(){
int n,count;
long long int a0,a1,b0,b1,x;
scanf("%d",&n);
while(n--){
count=0;
scanf("%lld%lld%lld%lld",&a0,&a1,&b0,&b1);
for(x=1;x*x<=b1;x++){ //x在1~sqrt(b1)间枚举
if(b1%x==0){
if((gcd(x,a0)==a1)&&(lcm(x,b0)==b1)){
count++;
}
if((b1/x!=x)&&(gcd(b1/x,a0)==a1)&&(lcm(b1/x,b0)==b1)){
count++;
}
}
}
printf("%d\n",count);
}
return 0;
}