关于scanf函数输入及小题目回顾

1.a+b累加和的计算及scanf函数的输入

#include <stdio.h>

int main()
{
int a,b;
    while(scanf("%d%d",&a,&b)&&(a||b))//当输入结果为0 0时,循环结束 
    {
printf("%d",a+b);      //每次循环做累积和 
    }
return 0;

 2.a+b的和及scanf函数的特殊结束方式

#include <stdio.h>
int main()
{
   int a,b;
   while(scanf("%d%d",&a,&b)!=EOF)//按下特殊键ctrl+z时,循环结束 
   {printf("%d\n",a+b);}//输出a+b的和 
   return 0;
}

3.百钱白鸡问题

#include <stdio.h>
int main()
{
int a,b,c;//百钱白鸡,三重for循环即可解决
for(a=0;a<20;a++) 
  for(b=0;b<33;b++)
     for(c=0;c<100;c+=3)
       if(5*a+3*b+c/3==100&&a+b+c==100) printf("cock=%d,hen=%d,chicken=%d\n",a,b,c);//运用方程的思想,设三个变量,在循环之中不断判断if条件语句的成立条件再输出 
return 0; 
}

4.砝码称重问题

小明非常喜爱物理,有一天,他对物理实验室中常用的弹簧拉力计产生了兴趣。实验室中有两种质量不同的砝码,小明分别用a个第一种砝码放在弹簧拉力计上和b个第二种砝码放在弹簧拉力计上,假设每增加单位重量的砝码,弹簧拉力计的长度增加1,那么两次称量弹簧拉力计的长度差是多少呢?(假设拉力计不发生非弹性形变)

Input


第一行一个整数T,表示有T组数据。

之后T行,每行数据包含四个正整数,分别表示第一种砝码重量a,第一种砝码数量b,第二种砝码重量c,第二种砝码数量d

T<25

0<a,b,c,d<=100


Output

对于每组数据,输出一个正整数,表示弹簧拉力计的长度差值。

Sample Input


3
1 2 3 4
1 4 2 2
1 3 2 1

Sample Output


10
0
1

解题思路:

#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c,d,n,l[10],i; //根据题目及输入可以判断,需要输入4个有效数据 
scanf("%d",&n);
for(i=0;i<n;i++)//循环输出将要输出的数据组数 
  {scanf("%d%d%d%d",&a,&b,&c,&d);
  l[i]=fabs(a*b-c*d);//由于输入数据是几组一起输入,因此可以用数组结合绝对值函数将计算结果保存,等待输出 
  }
  for(i=0;i<n;i++)
        printf("%d\n",l[i]);
 } 
 /*解题感想:解决题目时,可以先根据输入与输出结果想出其中的思路,之后再不断改进 

3.矩阵乘法:

矩阵乘法是线性代数中最基本的运算之一。
给定三个矩阵A=(a ij) p*q, B=(b ij) r*s, C=(c ij) m*n
请编写程序判断A·B=C 是否成立。

Input
输入包含多组数据。每组数据的格式如下:
第一行包括两个整数p 和q,表示矩阵A 的大小。后继p 行,每行有q 个整数,表示矩阵A的元素内容。
紧接着用相同的格式给出矩阵B 和矩阵C。
输入数据的最后一行是两个0,你的程序处理到这里时就应该退出了。
输入数据中所有的整数绝对值都不超过100。

Output
对每一组输入数据,你的程序都要输出单独一行字符。
如果A·B=C成立则输出”Yes”
如果A和B根本不能相乘,或A·B=C不成立,则输出”No”。注意大小写。

Sample Input
Original Transformed
2 3
1 2 3
4 5 6
3 2
1 2
3 4
5 6
2 2
22 28
49 64

1 2
1 2
2 1
2
1
2 2
2 4
1 2

1 2
1 2
1 1
1
1 1
1

0 0

Sample Output
Original Transformed
Yes
No
No

#include <stdio.h>
int main()
{
int m,n,p,q,r,s,k,sum,t=0;
int i,j;
do {
scanf("%d%d",&m,&n);//三重for循环作为三次数组输出 
if(m==0&&n==0) break;//输入0 0直接跳出循环 
int a[m][n];
for(i=0;i<m;i++) 
 for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
scanf("%d%d",&p,&q);
int b[p][q];
for(i=0;i<p;i++) 
 for(j=0;j<q;j++)
{
scanf("%d",&b[i][j]); 

scanf("%d%d",&r,&s);
int c[r][s]; 
for(i=0;i<r;i++)
  for(j=0;j<s;j++)
    scanf("%d",&c[i][j]);
if(n==p)//判断输入的数组a b是否满足矩阵乘法的原则  
{
int d[m][q];
for(i=0;i<m;i++){
  for(j=0;j<q;j++){
     sum=0;
     for(k=0;k<n;k++){
      sum+=a[i][k]*b[k][j];//矩阵乘法的计算原则 
 }
    d[i][j]=sum;//计算矩阵a b相乘的结果,方便与输入的矩阵c做对比(以后再也不用担心矩阵乘法会出错了) 
   }  
}
for(i=0;i<r;i++)
  for(j=0;j<s;j++)
 {  
   if(d[i][j]!=c[i][j])  t+=1;   
 } 
 if(t==0) printf("Yes\n");   //判断矩阵相乘后结果是否正确 
  else printf("No\n");
}
else printf("No\n"); 
        } while(m&&n);
      return 0;
}

/*奈何工大与安大的OJ平台不通过,只有安科的承认。但运行没问题,结果也没问题,求指点呀!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值