赞
踩
/*** 美国数学家维纳(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<stdio.h> #include<math.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h>
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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h>
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<stdio.h> 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 <stdio.h> #include <stdlib.h> 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<stdio.h> 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<stdio.h> #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<stdio.h> 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<stdio.h> #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<stdio.h> 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<stdio.h> 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<stdio.h> #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<stdio.h> #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<stdio.h> 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<stdio.h> #include<math.h> //检查一个整数是否是素数 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 <stdio.h> #include <stdlib.h> 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<stdio.h> #include<math.h> 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,要求用“<H>:<M>:<S>”的格式来表示这个时间。 <H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。 例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。 输入格式 输入只有一行,是一个整数t(0<=t<=86399)。 输出格式 输出只有一行,是以“<H>:<M>:<S>”的格式所表示的时间,不包括引号。 样例输入 0 样例输出 0:0:0 样例输入 5436 样例输出 1:30:36 ***/ #include<stdio.h> 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<stdio.h> #include<string.h> #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<stdio.h> #include<string.h> #include<ctype.h>//字符串操作 #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<stdio.h> #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<stdio.h> #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<stdio.h> #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<stdio.h> int main(){ char n; scanf("%c",&n); if(n>='0'&&n<='9') printf("yes"); else printf("no"); return 0; }
/***
编写函数把一个十进制数输出其对应的八进制数。
样例输入
9274
样例输出
22072
***/
#include<stdio.h>
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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> #include<string.h> #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<stdio.h> 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<stdio.h>
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<stdio.h> 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<stdio.h> 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<stdio.h>
int main(){
char n;
scanf("%c",&n);
printf("%c",n+32);
return 0;
}
/*** 问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。 输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。 输出格式:输出经过转换后的字符串。 输入输出样例 样例输入 AeDb 样例输出 aEdB ***/ #include<stdio.h> #include<string.h> #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<n<=100),然后输出n!最右边的那个非0的数字是多少。 输入: 7 输出: 4 ***/ #include<stdio.h> 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<stdio.h> 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<stdio.h> #include<math.h> 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<stdio.h> 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<stdio.h>
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<stdio.h> 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<stdio.h> #include<string.h> #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<stdio.h> #include<string.h> int main(){ char s1[100],s2[100]; scanf("%s%s",s1,s2); int i; for(i=0;i<strlen(s1)&&i<strlen(s2);i++){ if(s1[i]<s2[i]){//s1先序输出1直接退出程序 printf("1"); return 0; } else if(s1[i]>s2[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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> #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<stdio.h> #include<math.h> 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<stdio.h> #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<stdio.h> 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<stdio.h> 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<stdio.h>
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<stdio.h> #include<math.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> #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 <stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> #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<stdio.h> #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<stdio.h> #include<math.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> 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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。