最大公约数和最小公倍数
#include<stdio.h>
int main()
{
int m,n,r;
int b;
int x, y;
scanf("%d %d",&m,&n);
x=m;
y=n;
while(m%n){
r=m%n;
m=n;
n=r;
}
b=x*y/n;
printf("%d %d",n,b);
return 0;
}
高空坠球
#include<stdio.h>
int main()
{
double s;
double h;
int n;
int i;
scanf("%lf %d",&h,&n);
if(n==0)printf("0.0 0.0");
else{
s=h;
for(i=1;i<=n;i++){
h=h/2.0;
s=s+h*2.0;
}s=s-h*2;
printf("%.1f %.1f",s,h);
}
return 0;
}
打印菱形图案
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=(n/2+1);i++){
for(int j=1;j<=n+1-2*i;j++)
printf(" ");
for(int z=1;z<=2*i-1;z++)
printf("* ");
printf("\n");
}
for(int i=1;i<=n/2;i++){
for(int j=1;j<=2*i;j++)
printf(" ");
for(int z=1;z<=n-i*2;z++)
printf("* ");
printf("\n");}
return 0;
}
猴子吃桃问题
#include<stdio.h>
int main()
{
int n;
int a=1;
scanf("%d",&n);
for(int i=1;i<n;i++){
a=(a+1)*2;
}
printf("%d",a);
return 0;
}
兔子繁衍问题
#include<stdio.h>
int main(){
int n;scanf("%d",&n);
int yuefen=1;
if(n==1)printf("1");
else{
int a=1,b=1;do{
int c;
c=a+b;
a=b;
b=c;
yuefen++;
}while(a<n);
printf("%d",yuefen);}
return 0;
}
英文字母替换加密(大小写转换+后移1位)
#include<stdio.h>
int main(){
char ch;
ch=getchar();
while(ch!='\n'){
if(ch>='a'&&ch<'z')
printf("%c",ch-31);
else if(ch>='A'&&ch<'Z')
printf("%c",ch+33);
else if(ch=='Z')
printf("a");
else if(ch=='z')
printf("A");
else
printf("%c",ch);
ch=getchar();
}return 0;
}
简单计算器
#include<stdio.h>
int main(){
char op;
int sum;
int a;
int falt=1;
scanf("%d",&sum);
while(falt){
scanf("%c",&op);
if(op=='=')break;
scanf("%d",&a);
switch(op){
case '+':sum+=a;break;
case '-':sum-=a;break;
case '*':sum*=a;break;
case '/':
if(a==0)falt=0;
else sum/=a;break;
default:falt=0;break;
}
}
if(falt==1)printf("%d",sum);
if(falt==0)printf("ERROR");
return 0;
}
单词首字母大写
#include<stdio.h>
int main(){
char ch;
int f=1;
scanf("%c",&ch);
while(ch!='\n'){
if(f==1){
if(ch>='a'&&ch<='z')
ch=ch-32;
f=0;
}if(ch==' ')f=1;
printf("%c",ch);
scanf("%c",&ch);
}return 0;
}
求最大值及其下标
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int arr[10];
int max;
int j;
scanf("%d",&arr[0]);
max=arr[0];
for(int i=1;i<n;i++){
scanf("%d ",&arr[i]);
if(max<arr[i])max=arr[i];
}
for( j=0;j<n;j++){
if(arr[j]==max)break;
}
printf("%d %d",max,j);
return 0;
}
将数组中的数逆序存放
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int arr[10];
int a;
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
for(int j=0;j<n/2;j++){
a=arr[j];
arr[j]=arr[n-1-j];
arr[n-1-j]=a;
}printf("%d",arr[0]);
for(int k=1;k<n;k++){
printf(" %d",arr[k]);
}return 0;
}
找出不是两个数组共有的元素
#include<stdio.h>
int main(){
int a1[20];
int a2[20];
int m,n;
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&a1[i]);
}
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf(" %d",&a2[i]);
}int falt=1;int a3[20];int k=0;int i;
for( i=0;i<m;i++){falt=1;
for(int j=0;j<n;j++){
if(a1[i]==a2[j])falt=0;
}
for(int j=0;j<k;j++){
if(a1[i]==a3[j])falt=0;
}
if(falt==1){
a3[k]=a1[i];k++;
}
}
for( i=0;i<n;i++){falt=1;
for(int j=0;j<m;j++){
if(a2[i]==a1[j])falt=0;
}
for(int j=0;j<k;j++){
if(a2[i]==a3[j])falt=0;
}
if(falt==1){
a3[k]=a2[i];k++;
}
} for(int i=0;i<k;i++){
if(!i)printf("%d",a3[i]);
else printf(" %d",a3[i]);
}
return 0;
}
矩阵运算
#include<stdio.h>
int main(){
int a[10][10];
int n;int sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d ",&a[i][j]);
}}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==n-1||j==n-1||j==n-1-i){;}
else sum+=a[i][j];
}}
printf("%d",sum);
return 0;
}
方阵循环右移
#include<stdio.h>
int main(){
int a[6][6];
int m,n;
scanf("%d %d",&m,&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}for(int i=0;i<n;i++){
for(int k=0;k<m;k++){
int left=a[i][n-1];
for(int j=n-1;j>0;j--){
a[i][j]=a[i][j-1];
}
a[i][0]=left;}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d ",a[i][j]);
}printf("\n");
}return 0;
}
计算天数
#include<stdio.h>
int main(){
int y,m,d;
scanf("%4d/%2d/%2d",&y,&m,&d);
int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int sum=0;
if(y%4==0&&y%100!=0||y%400==0){
for(int i=0;i<m-1;i++){
sum+=a[i];
}
}
else{
for(int i=0;i<m-1;i++){
sum+=b[i];
}
}
int Sum=0;
Sum=sum+d;
printf("%d",Sum);
return 0;
}
查找指定字符
#include<stdio.h>
#include<string.h>
int main(){
char a[81];
char x;
scanf("%c",&x);
getchar();
gets(a);
int tmp=-1;
int n=strlen(a);
for(int i=0;i<n;i++){
if(a[i]==x)tmp=i;
}
if(tmp==-1) printf("Not Found");
else printf("index = %d",tmp);
return 0;
}
字符串逆序
#include<stdio.h>
#include<string.h>
int main(){
char a[81];
gets(a);
int n=strlen(a);
for(int i=n-1;i>=0;i--){
printf("%c",a[i]);
}return 0;
}
选择法排序
#include<stdio.h>
int main(){
int n;
int a[10];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d ",&a[i]);
}
int tmp=0;int b;
for(int i=0;i<n;i++){
tmp=i;
for(int j=i+1;j<n;j++){
if(a[tmp]<a[j])tmp=j;
}
b=a[i];
a[i]=a[tmp];
a[tmp]=b;
}
for(int i=0;i<n;i++){
if(i==0){
printf("%d",a[i]);
}else printf(" %d",a[i]);
}
return 0;
}
求一批整数中出现最多的个位数字
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int a[10]={0};
int number;
for(int i=1;i<=n;i++){
scanf("%d",&number);
if(number==0)a[0]++;
while(number){
a[number%10]++;
number/=10;
}
}
int max=a[0];
for(int i=1;i<10;i++){
if(max<a[i])max=a[i];
}
printf("%d:",max);
for(int i=0;i<10;i++){
if(max==a[i])printf(" %d",i);
}
return 0;
}
判断上三角矩阵
#include<stdio.h>
int main(){
int T;
scanf("%d",&T);
int n;int a[10][10];
for(int i=1;i<=T;i++){
scanf("%d",&n);
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
scanf("%d",&a[j][k]);
}
}int c=0;
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
if(j>k){
if(a[j][k]==0)c++;
}
}
}if(c==n*(n-1)/2)printf("YES\n");
else printf("NO\n");
}return 0;
}
求矩阵各行元素之和
#include<stdio.h>
int main(){
int m,n;
int a[6][6];
scanf("%d %d",&m,&n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int b[6];int sum;
for(int i=0;i<m;i++){
sum=0;
for(int j=0;j<n;j++){
sum+=a[i][j];
}
b[i]=sum;
}
for(int i=0;i<m;i++){
printf("%d\n",b[i]);
}return 0;
}
找鞍点
#include<stdio.h>
int main(){
int n;
int a[6][6];
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int falt=0;int b;int c;int d;int m=0;
for(int i=0;i<n;i++){
b=a[i][0];
for(int j=0;j<n;j++){
if(b<=a[i][j]){
b=a[i][j];
d=i; c=j; }
}int k;
for( k=0;k<n;k++){
if(b>a[k][c])break;
}
if(k==n)falt=1;
if(falt==1){printf("%d %d",d,c);
falt=0;
m++; }
}
if(m==0)printf("NONE");
return 0;
}
统计大写辅音字母
#include<stdio.h>
#include<string.h>
int main(){
char a[81];
gets(a);
int c=0;
int n=strlen(a);
for(int i=0;i<n;i++){
if(a[i]>'A'&&a[i]<='Z'){
if(a[i]!='E'&&a[i]!='I'&&a[i]!='O'&&a[i]!='U'){
c++;
}
}
}printf("%d",c);
return 0;
}
字符串替换
#include<stdio.h>
#include<string.h>
int main(){
char a[81];
gets(a);
int n=strlen(a);
for(int i=0;i<n;i++){
if(a[i]>='A'&&a[i]<='Z'){
a[i]='A'+'Z'-a[i];
}
}
puts(a);
return 0;
}
字符串转换成十进制整数
#include<stdio.h>
#include<math.h>
int zhuanhuan(char ch){
if(ch>='A'&&ch<='F')return ch-'A'+10;
else if(ch>='a'&&ch<='f')return ch-'a'+10;
else if(ch>='1'&&ch<='9')return ch-'0';
else return 0;
}
int main(){
char a[80];
gets(a);
int sum=0;int falt =0;
int x=0;int b[80];
for(int i=0;a[i]!='#';i++){
if(zhuanhuan(a[i])){
b[x]=zhuanhuan(a[i]);
x++;
}
if(a[i]=='-'&&x==0)falt=1;
} int k=0;
for(int j=x-1;j>=0;j--){
sum+=b[k]*pow(16,j);
k++;
}
if(falt)sum=-sum;
printf("%d",sum);
return 0;}
字符串排序
#include<stdio.h>
#include<string.h>;
int main(){
int a[5][81];
for(int i=0;i<5;i++){
scanf("%s",&a[i]);
}int b[81];
for(int i=0;i<4;i++){
for(int j=i+1;j<5;j++){
if(strcmp(a[i],a[j])>0){
strcpy(b,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
}printf("After sorted:\n");
for(int i=0;i<5;i++){
printf("%s\n",a[i]);
}
return 0;
}
输出学生成绩
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
double a[n];
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);
}
double average;
double max,min;
double sum=0;
max=a[0];
min=a[0];
for(int i=0;i<n;i++){
sum+=a[i];
if(max<a[i])max=a[i];
if(min>a[i])min=a[i];
}
average=sum*1.0/n;
printf("average = %.2f\nmax = %.2f\nmin = %.2f\n",average,max,min);
return 0;
}
时间换算
#include<stdio.h>
int main(){
int h,m,s;
int x;
scanf("%d:%d:%d",&h,&m,&s);
scanf("%d",&x);
s+=x;
if(s>=60){
if(m==59){
h+=1;
m=0;
s-=60;
}else{
m+=1;
s-=60;
}
}
if(h>=24)h-=24;
printf("%02d:%02d:%02d",h,m,s);
return 0;
}
平面向量加法
#include<stdio.h>
int main(){
double x1,x2,y1,y2;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
double x,y;
x=x1+x2;
y=y1+y2;
if(fabs(x)<0.05)x=0.0;
if(fabs(y)<0.05)y=0.0;
printf("(%.1f, %.1f)",x,y);
return 0;
}
查找书籍
#include <stdio.h>
#include <stdlib.h>
struct book{
char name[100];
double price;
};
int main(void)
{
int i,n;
int max=0,min=0;
struct book a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("\n");
gets(a[i].name);
scanf("%lf",&a[i].price);
}
for(i=0;i<n;i++)
{
if(a[i].price<a[min].price)
{
min=i;
}
if(a[i].price>a[max].price)
{
max=i;
}
}
printf("%.2f, %s\n",a[max].price,a[max].name);
printf("%.2f, %s\n",a[min].price,a[min].name);
return 0;
}
通讯录排序
#include<stdio.h>
struct fri //本来这里想用friend,但一直报错,后来才知道这是一种交友元的函数
{
char name[10];
int brithday;
char number[17];
}a[10],t;
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s %d %s",a[i].name,&a[i].brithday,a[i].number); //由于name,number是数组名称代表了地址,因此可以不用&
}
//选择排序
for(i=0;i<n-1;i++){
for(j=i;j<n;j++){
if(a[i].brithday>a[j].brithday){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<n;i++){
printf("%s %d %s\n",a[i].name,a[i].brithday,a[i].number);
}
}
坚持的力量
#include<stdio.h>
#include<math.h>
int main()
{
double initial,factor,result;
int day;
scanf("%lf %lf %d",&initial,&factor,&day);
result=initial*pow((1+factor),day);
printf("result = %.2lf",result);
return 0;
}
大家一起来玩游戏
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double num[4];
int result=24;
double precision=1e-6;
int test(int n)
{
int i,j;
if(n==1)
{
if(fabs(num[0]-result)<precision)
return 1;
else
return 0;
}
for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
{
double a,b;
a=num[i];
b=num[j];
num[j]=num[n-1];
num[i]=a+b;
if(test(n-1))
return 1;
num[i]=a-b;
if(test(n-1))
return 1;
num[i]=b-a;
if(test(n-1))
return 1;
num[i]=a*b;
if(test(n-1))
return 1;
num[i]=a/b;
if(test(n-1))
return 1;
num[i]=b/a;
if(test(n-1))
return 1;
num[i]=a;
num[j]=b;
}
return 0;
}
int main()
{
int flag=0;
int n;
scanf("%d",&n);
while(n--)
{
int i;
for(i=0; i<4; i++)
scanf("%lf",&num[i]);
if(!flag)
{
if(test(4)==1)
printf("True");
else
printf("False");
flag=1;
}
else
{
if(test(4)==1)
printf(" True");
else
printf(" False");
}
}
return 0;
}
特殊约瑟夫问题
#include<stdio.h>
#include<string.h>
int main()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k); //获取数据
//exist用来存储玩家是否被出局,pointer表示指到的小朋友
int pointer = 1, exist[n + 1];
// flag用于下方,用于标识这次是顺时针报数还是逆时针
// 由于小朋友们按照顺时针排序,所以在此-1表示逆时针,1标识顺时针.
int flag = -1;
// 初始化所有小朋友的状态为未出局.
for (int i = 0; i <= n; i++) {exist[i] = 1;}
// 第0个数据用来记录现在还没出局的小朋友数
exist[0] = n;
for (; exist[0];flag *= -1)
{
// temp用来存储本次出局要报数的个数
int temp;
if (flag == -1) temp = m - 1;
else temp = k - 1;
while (temp)
{
// 指向下一位,不考虑出局与否
pointer += flag;
// 环形
if (pointer < 1) pointer = n;
else if (pointer > n) pointer = 1;
// -=小朋友是否出局
// 如果小朋友出局的话那么就-0,相当于跳过这位小朋友
temp -= exist[pointer];
}
printf("%d ", pointer);
exist[0]--; //每出局一个,人数减少1
exist[pointer] = 0; // 更新他的存活状态
}
return 0;
}
分数统计
#include<stdio.h>
#include<stdlib.h>
#define max_std 1000001
#define max_score 1001
//应用到桶排序的方法
int stu[max_std]; //定义一个存储学生分数的数组
int score[max_score]; //定义一个记录分数出现次数的数组
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) //将学生i的分数读入stu数组
{
scanf("%d",&stu[i]);
score[stu[i]]++; //同时在score对相应的分数出现的次数加一
}
for(int i=1;i<=max_score;i++)
{
score[i]+=score[i-1]; //遍历,记录每个分数以下的其他分数出现的次数,
} //也就是记录每个分数以下的学生的人数
for(int i=1;i<=n;i++)
{
printf("%d ",score[stu[i]-1]);
/*由上一个for循环的操作可知:欲得到该比某分数低的人数为多少,只需得知
该分数减一的分数(该分数的上一个分数)出现的次数即可*/
}
}
判断一个三位数是否为水仙花数
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a,b,c;
if(n>=100&&n<=999)
{
a=n/100; //百位
b=(n%100)/10; //十位
c=n%10; //个位
if(n==a*a*a+b*b*b+c*c*c)
{
printf("Yes");
}
else
{
printf("No");
}
}
else
{
printf("Invalid Value.");
}
return 0;
}