- 判断一个数是否为素数
#include <stdio.h>
int main()
{
int n,i=1;
printf("请输入n的值:\n");
scanf("%d",&n);
//此处可用i <= n^(1/2)进行优化
for(i=1;i<n-1;i++)//从1开始也可以判读1不是素数
if(n%i==0)break;
if(i<n)printf("%d不是素数\n",n);
else printf("%d是素数\n",n);
}
- 斐波那契数列第n项是否能被3整除
在繁荣山丘,有一种奇怪的斐波那契数列,人们不关心他第几项是多少,只关心它能否被3整除。在这里,,F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2)。
请你判断一下第n项是否能被3整除
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
//通过找规律得出的结论
if(n % 4 == 2){
printf("YES");
}else {
printf("NO");
}
return 0;
}
- 大小写转换代码
#include <stdio.h>
int main()
{
char ch;
scanf("%c",&ch);
//大小写字符的ASCII码相差32,且小写字符的更大
ch=(ch>='A'&&ch<='Z')? (ch+32):ch;
ch=(ch>=‘a’&&ch<=‘z’)? (ch - 32):ch;
printf("%c\n",ch);
return 0;
}
- 向上/下取整
#include <math.h>
floor为向下取整函数 ,输入输出都是浮点型,若要得到整形的,要使用(int)()进行强制转换
ceil为向上取整函数,其他用法同上 - 取糖果问题
桌子上有1堆糖果,一共有n颗,两人轮流取糖果。规定每次最少拿1颗,最多拿m颗,最后拿完的人获胜。(两个人都很聪明,都懂得使用最优策略)
#include <stdio.h>
int main()
{
int n,m;
scanf("%d %d",&m,&n);
if(n% (m+1) == 0){ //第一个人拿的时候处于平衡态
printf("Second win");
}else { //第一个拿的时候不处于平衡态,取x个使第二个人拿的时候处于平衡态就能保证最后一个拿到糖果
printf("First win");
}
return 0 ;
}
6.利用迭代法计算x=sqrt(a)
求平方根的迭代公式为:
Xn+1=0.5*(Xn+a/Xn)。
#include<stdio.h>
Int main()
{
Int a;
scanf(“%d”,&a);
double x =1.0,x1;
do{
x1 = x;
x = (x1 + a/x1)/2;
}while(fabs(x1-x)>1e-5);//用来约束精确程度
printf(“%lf”,x);
}
- 斐波那契数列(4个一行)
#include <stdio.h>
int main()
{
int f1=1,f2=1;
int i;
for(i=1;i<=20;i++)
{
printf("%12d%12d",f1,f2);
if(i%2==0)
printf("\n");
f1=f1+f2;
f2=f2+f1;
}
return 0;
}
- 找零问题
#include <stdio.h>
int main()
{
int x;
int one,two,five;
int exit=0;
scanf("%d",&x);
for(one=1;one<x*10;one++){
for(two=1;two<x*10/2;two++){
for(five=1;five<x*10/5;five++){
if(one+two*2+five*5==x*10){
printf("可以用%d个一角加%d个2角加%d个5角得到%d元\n",one,two,five,x);
exit=1;
break;
}
}
if(exit==1) break;
}
if(exit==1)break;
}
return 0;
}
- bool量
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool b=6>5;//bool量的值只有1或0,关系式正确即为0
bool t=true;
t=2; //bool量不是0就是1
printf("%d\n",b);
printf(“%d\n”,t);//此时不会打印出2,而会打印出1,因为2为非0数
return 0;
}
- 计算各种量的字节长度
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool b=6>5;//bool量的值只有1或0,关系式正确即为0
bool t=true;
t=2; //bool量不是0就是1
printf("%d\n",b);
printf(“%d\n”,t);//此时不会打印出2,而会打印出1,因为2为非0数
return 0;
}
- 计算1-1/2+1/3-1/4……-1/100
#include <stdio.h>
int main()
{
int sign=1;
double deno=2.0,term,sum=1;
while(deno<100)
{
sign=-sign; //用sign来改变正负号
term=sign/deno;
sum=sum+term;
deno++;
}
printf("%f\n",sum);
return 0;
}
- 比较三个数的大小关系(按a<b<c的顺序排列)
#include <stdio.h>
int main()
{
int a,b,c,dem;
scanf("%d %d %d",&a,&b,&c);
if(a >b)
{
dem = a;
a = b;
b = dem;
}
if(b >c)
{
dem = b;
b = c;
c = dem;
}
if(a >c)
{
dem = a;
a = c;
c = dem;
}
printf("%d",dem);
return 0;
}
- 冒泡排序
#include<stdio.h>
int main()
{
int n = 0,j = 0,i = 0,t = 0;
int number[100];
scanf("%d",&n);
for (i = 0;i< n;i++){
scanf("%d",&number[i]);
}
for (i = 0;i< n-1;i++){
for(j = 0;j < n-1-i;j ++){
if(number[j]>number[j+1]){
t = number[j];
number[j] = number[j+1];
number[j+1] = t;
}
}
}
printf("%d %d",number[n-2],number[1]);
return 0;
}
//输出的不一定是次大值和次小值,因为可能存在两个或多个最大/小值的情况
#include<stdio.h>
int main()
{
int n = 0,j = 0,i = 0,t = 0;
int number[100];
int min1,min2;
int max1,max2;
scanf("%d",&n);
for (i = 0;i< n;i++){
scanf("%d",&number[i]);
}
min1 = number[0];
min2 = min1;
for (i = 0;i< n;i++){
if(number[i] < min2){
min2 = number[i];
if(min2 < min1){
t = min2;
min1 = min2;
min2 = t;
}
}
if(min1 == min2){
min2 = number[I];//若相等,则将其赋值为另一个值
}
}
max1 = number[0];
max2 = max1;
for (i = 0;i< n;i++){
if(number[i] > max2){
max2 = number[i];
if(max2 > max1){
t = max2;
max2 = max1;
max1 = t;
}
}
if(max1 == max2){
max2 = number[i];
}
}
printf("%d %d",max2,min2);
return 0;
}
#include <stdio.h>
int main()
{
int n = 0;
int numbers[100];
int i = 0,j = 0;
int t = 0;
int max = 0,min = 0;
scanf("%d",&n);
for(i = 0; i < n;i++){
scanf("%d",&numbers[i]);
}
for(i = 0;i < n - 1;i++){
for(j = 1;j <=n - 1 - i;j++){
if(numbers[j - 1] > numbers[j]){
t = numbers[j - 1];
numbers[j - 1] = numbers[j];
numbers[j] = t;
}
}
}
min = numbers[0];
max = numbers[n - 1];
for(i = 0;i < n - 1;i++){
if(numbers[i] > min){
min = numbers[i];
break;
}
}
for(i = n-1;i>=0;i--){
if(numbers[i] < max){
max = numbers[i];
break;
}
}
printf("%d %d",max,min);
return 0;
}
- 金字塔
#include<stdio.h>
int main()
{
int i,j;
char n;
scanf("%c",&n);
for(i=0;i<=n-'A';i++)
{
for(j=0;j<n-'A'-i;j++)
printf(" ");
for(j=0;j<=i;j++)
printf("%c",j+'A');
for(j=i-1;j>=0;j--)
printf("%c",j+'A');
printf("\n");
}
return 0;
}
- 一元二次方程是否有整数解
#include<stdio.h>
#include<math.h>
int fun(double *x1, double *x2, double a, double b, double c)
{
double dt,absdt;
if(fabs(a)<1e-14)//解决浮点数比较误差的问题
return 0;//a为0时
dt=b*b-4*a*c;
absdt=fabs(dt);
if(absdt<1e-14){
*x1=*x2=-b/(2*a);
return 1;
} else if(dt>0){
*x1=(-b+sqrt(dt))/(2*a);
*x2=(-b-sqrt(dt))/(2*a);
return 1;
} else return 0;
}
int main()
{
double a,b,c,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
if(fun(&x1,&x2,a,b,c)==1){
if(x1 == x2){
if((int)(x1) == x1){
printf("%.2f",x1);
}else{
printf("No solution");
}
}else{
if((int)(x1) == x1){
printf("%.2f",x1);
printf("%.2f",x2);
}else{
printf("No solution");
}
}}else
printf("No solution");
return 0;
}
- 给定一个十进制数,把它转化为八进制数。
#include <stdio.h>
int main()
{
int n=0,m=1,k=0,i=0;
int a[32]={0};
scanf("%d",&n);
while((m!=0) && (i<32))
{
k=n%8;
m=n/8;
a[i]=k;
n=m; //把除数赋值给被除数
i++;
}
for(i=i-1;i>=0;i--)
{
printf(“%d”,a[I]);//逆序输出
}
return 0;
}
- 一个大于9的数,便用其数位之和去代替这个数,如果位数仍然大于9,则继续重复上述步骤,直到其小于10为止。
#include <stdio.h>
int main()
{
int x = 0;
scanf("%d",&x);
int sum = 10;
while(sum >=10)
{
sum = 0;
while(x > 0) {
sum += x % 10;
x /= 10;
}
x = sum;
}
printf("%d",sum);
return 0;
}
- 判断三边能否构成三角形
#include<stdio.h>
main()
{
int s[3];
int i=1;
int n;
scanf("%d",s[0]);
scanf("%d",s[1]);
scanf("%d",s[2]);
n=s[0]+s[1]+s[2];
for(i=0;i<3;i++)
{
if (s[i]<n-s[i])
continue;
if(s[i]>=n-s[i])
printf("Three edges can not be composed of triangles");
}
if(i=2&&s[2]<n-s[2])
printf("Three edges can be composed of triangles");
return 0;
}
- 统计输入字符的种类的个数
#include <stdio.h>
int main()
{
int i = 0;
int l = 0,s = 0,n = 0,e = 0;
char c;
while((c = getchar())!= '\n'){
if((c>= 'a' &&c <='z') ||(c>='A' &&c <='Z')){
l++;
}else if(c>='0' && c <='9'){
n ++;
}else if(c==' '){
s++;
}else{
e++;
}
}
printf("%d %d %d %d",l,s,n,e);
return 0;
}
- 求两个数的最大公因数和最小公倍数
#include <stdio.h>
int main()
{
int m,n,i,u,max=0,min = 0,bigger;
scanf("%d %d",&m,&n); //注意此处若为%d,%d则输入时也要,
if(n > m){
bigger = n;
}else{
bigger = m;
}
for(i = bigger;i>=1;i--){
if(m % i == 0 && n % i == 0 ){
max = i;
printf("%d\n",max);
break;
}
}
for(u = 1;i<=1000;u++){
if((max *u) % m == 0 && (max *u) % n == 0){
min = max *u;
break;
}
}
printf("%d\n%d\n",max,min);
return 0;
}
- 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
#include<stdio.h>
int main()
{
int i,n,m,a[45];
scanf("%d",&n);
while(~scanf("%d",&m))
{
a[1]=1;
a[2]=1;
a[3]=2;
for(i=4;i<=m;i++)
{
a[i]=a[i-1]+a[i-2];
}
printf("%d\n",a[m]);
}
return 0;
}
- 铺地砖:一个矩形游泳池(大小为n x m),需要在游泳池内部的最外围,铺一圈宽度为1的防滑瓷砖,想请你帮帮忙,看看什么样的地砖比较合适。输入有两行,第一行有两个正整数n,m(3<=n,m<=20),表示需要铺的范围,第二行一个整数A,表示地砖的尺寸A×1(1<=A<=min(n,m))。如果地砖恰好能铺满泳池一圈,则输出”YES”,否则输出”NO”。
#include <stdio.h>
int main()
{
int n,m,A;
scanf("%d %d %d",&n,&m,&A);
if ((n % A == 0 && (m -2) % A == 0) ||( m % A == 0 && (n - 2) % 1 == 0) ){
printf("YES");
}else if(n % A == 0 &&(n - 2) % A == 0 &&(m - 1)%A == 0) {
printf("YES"); //此情况和下一种情况都包涵在第四种情况内了
}else if(m % A == 0 &&(m - 2) % A == 0 &&(n - 1)%A == 0) {
printf("YES");
}else if((n - 1) % A == 0 &&(m - 1) % A == 0 ) {
printf("YES");
}else {
printf("NO");
}
return 0;
}
- 给定一个二十四时表示的时间,求过了N分钟后的时间。
# include<stdio.h>
int main()
{
int a,c,t,b,d; //a原先的小时数
scanf("%d:%d\n%d",&a,&c,&t);
d = (c+t)%60;
b = (a + (c+t)/60)%24; //(c+t)/60 =小时 ///之所以%24 一部分原因是b<=24 超过24小时就要归零
if(b>=12)
printf("%02d:%02d pm",b%12,d); //%02d 表示存储两位数字 不足用0补上
else
printf("%02d:%02d am",b,d);
return 0;
- 在按顺序给出他按了灯开关的宿舍号。问最多的时候有多少盏灯是亮着的。(假设一开始所有的灯都是关着的)
第一行为两个正整数N,M,其中N表示有N层楼,每层楼有N间房(1 <= N <= 9); M表示这个奇怪的人共按了M次开关 (0 <= M <= 20)。
接下来M行,每行一个三位的整数,表示每次按下开关的宿舍编号。整数的最高位表示宿舍所在的楼层,中间一位是0,最低位表示宿舍在这层楼的第几间。
#include <stdio.h>
int main()
{
int N = 0,M = 0;
scanf("%d %d",&N,&M);
int rooms[20];
int room_number[20];
int room_floor[20];
int room_sign[9][9];
int cnt = 0;
int i = 0,j = 0;
for(i = 0;i < N;i++){
for(j = 0;j < N;j++){
room_sign[i][j] = -1;
}
}
for(i = 0;i < M;i++){
scanf("%d",&rooms[i]);
}
for(i = 0;i < M;i++){
room_number[i] = rooms[i] % 10;
// printf("%d\n",room_number[i]);
}
for(i = 0;i < M;i++){
room_floor[i] = (rooms[i] - room_number[i]) / 100;
// printf("%d\n",room_floor[i]);
}
// for(i = 0;i < N;i++){
// for(j = 0;j < N;j++){
// printf("%d\n",room_sign[i][j]);
// }
// }
for(i = 0;i < M;i++){
for(j = 0;j < N;j++){
room_sign[room_floor[i]][j] = -room_sign[room_floor[i]][j] ;
// printf("%d\n",room_sign[room_floor[i]][j]);
}
for(j = 0;j < N;j++){
room_sign[j][room_number[i] ] = -room_sign[j][room_number[i]];
}
}
for(i = 0;i < M;i++){
for(j = 0;j < N;j++){
if(room_sign[i][j] == 1){
cnt ++;
}
//printf("%d\n",room_sign[i][j]);
}
}
printf("%d",cnt);
return 0;
}
- 回文字符串
# include <stdio.h>
# include <string.h>
int main (void)
{
int n;
while (scanf("%d",&n)!=EOF)
{
int i,length,count;
char a[1000],b[1000];
while (n--)
{
count = 0;//每次循环必须初始化
scanf("%s",a);
length = strlen(a);//输入字符串并计算它的长度
for (i=0;i<length;i++) //把字符数组a的内容倒序赋值给b
b[i] = a[length-1-i];
for (i=0;i<length;i++)//计算a,b中相等元素的个数
if (b[i] == a[i])
count++;
if (count == length)//如果所有元素都相等则说明 a中元素倒序排列后仍相等
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}
- 求一个数的因子和
#include <stdio.h>
#include <math.h>
int main()
{
long n, s = 0;
int i;
scanf("%ld", &n);
for (i = 1; i <= sqrt(n); i++) {
if (n % i == 0)
if (i == n / i)
s += i;
else
s = s + i + n / i;
}
printf("%ld", s );
return 0;
}
- 汉诺塔
#include <stdio.h>
void MoveTower(int num, char src, char dst, char trs);
int main()
{
int n;
char s, d, t;
scanf("%d %c %c %c", &n, &s, &d, &t);
MoveTower(n, s, d, t);
return 0;
}
void MoveTower(int num, char src, char dst, char trs){
if(num == 1){
printf("%d: %c -> %c\n",num,src,dst);
}else{
MoveTower(num -1,src,trs,dst);
printf("%d: %c -> %c\n",num,src,dst);
MoveTower(num -1,trs,dst,src);
}
}
标签:main,include,int,scanf,number,C语言,printf,例题
From: https://www.cnblogs.com/linhongyu0090/p/17165821.html