eg,输入若干个数,直至遇到输入 -1 结束
1)灵活运用 , 符号,顺序从左到右
while(scanf("%d",&n),n!=-1)
2)灵活 运用 &&
while(scanf("%d",&n)&&n!=-1)
eg,先输入n,在输入n个数字
1)通过for循环实现(执行n次),不会改变n的值
for (int i=0; i < n;i++)
2)通过while循环实现(执行n次),当n最后变成0时循环结束,坏处就是会改变n的值
while(n--)
感兴趣的可以再去深入了解一下~
while(scanf("%d",&n)!=EOF)
while(~scanf("%d",&n))
从键盘输入n(n>0)个正整数,找到其中的最大值 提示: 假设最大值为-1 以后输入一个与最大值比较,如果比最大值大,则更新最大值为该输入数据 所有数据输入结束 就可以输出最大值
提示:
使用标记型循环结果:
scanf("%d",&s);
while(s!=标记值)
{
…… /* 你需要处理的问题 */
scanf("%d",&s);
}
循环中要处理的问题
if 输入的s大于最大值max
则更新max的值为s的值
输入
从键盘输入一系列数据,以-1作为输入结束标志
输出
输出其中的最大值
样例输入
1 2 3 4 5 6 7 8 9 -1
样例输出
9
逐个输入,逐个比较,详见代码(简写版):
#include
int main()
{
int n, max = -1;
while(scanf("%d",&n),n!=-1)
if(n>max) max = n;
printf("%d", max);
}
任意输入一个整数n(n在1..100000000),统计该数是几位数 提示: 用除10运算 如:123 , (1) 123/10=12 重复以上步骤,直至该数变为0为止
输入
任意输入一个整数n(n在1..100000000)
输出
输出该数的数码位数
样例输入
13456
样例输出
5
#include
int main(void)
{
int n,i=0;
scanf("%d", &n);
while(n)
n /= 10, i++;
printf("%d\n", i);
}
输入任意一整数,求该整数各位数码之和
输入
输入一整数n (其中n >=0,n <=100000000)
输出
输出各位数码之和
样例输入
13579
样例输出
9+7+5+3+1=25
主要注意格式问题,我把个位数提出来单独书写,所以 sum 后面还要再 +n%10
#include
int main(void)
{
int n,sum=0;
scanf("%d", &n);
while(n>10)
printf("%d+", n % 10), sum += n%10,n /= 10;
printf("%d=%d", n%10,sum+n%10);
}
有两只勤劳的蚂蚁在准备食物,为了自我激励一下,它们打算开展比赛,看谁在一段时间内准备的食物多一些。你能帮忙做个裁判吗,来统计一下哪只蚂蚁准备得更加多一些?
循环中要处理的问题
if 输入的s大于最大值max
则更新max的值为s的值
输入
输入有若干行,每行2个数字,第一个整数表示蚂蚁(1表示1号蚂蚁,2表示2号蚂蚁,不会出现其他数字)。第二个整数表示该蚂蚁带回的食物数量,假设该数据都在合法范围内。
当输入两个数字都为0(即0 0)时表示输入结束
输出
输出拖回食物多的蚂蚁的编号和食物总数量。如果相同,输出“equal”(输出不包含双引号)。输出后换行。
样例输入
1 2 2 9 1 7 2 6 1 1 2 0 1 2 2 11 0 0
样例输出
2 26
#include
int main()
{
int sum1,sum2;//sum1表示蚂蚁1,sum2表示蚂蚁2
int n, food;
sum1 = sum2 = 0;
while(scanf("%d %d",&n,&food),n!=0||food!=0)//遇到n和food同时为0停止
{
if(n==1)
sum1 += food;
else
sum2 += food;
}
if(sum1>sum2)
printf("%d %d", 1,sum1);
else if(sum1
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。
任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)
例如,对三位数207:
- 第1次重排求差得:720 - 27 = 693;
- 第2次重排求差得:963 - 369 = 594;
- 第3次重排求差得:954 - 459 = 495;
以后会停留在495这一黑洞数。如果三位数的3个数字全相同,一次转换后即为0。
任意输入一个三位数,编程给出重排求差的过程。
输入
输入在一行中给出一个三位数。
输出
按照以下格式输出重排求差的过程:
序号: 数字重排后的最大数 - 重排后的最小数 = 差值
序号从1开始,直到495出现在等号右边为止
样例输入
123
样例输出
1: 321 - 123 = 198
2: 981 - 189 = 792
3: 972 - 279 = 693
4: 963 - 369 = 594
5: 954 - 459 = 495
#include
int main()
{
int n,i=1,result=0;//初始化result,不为495即可
scanf("%d", &n);
while(result!=495)
{
int max, min;
int a, b, c, t;
a=n/100;b=n/10%10;c=n%10; //分解为a,b,c三个数
if(a
给定 N 个正整数,要求你从中得到下列三种计算结果: A1 = 能被 3 整除的最大整数 A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数 A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)
输入
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
样例输入
8
5 8 7 6 9 1 3 10
样例输出
9 3 6.5
此处没有讨论A1、A2、A3不存在的情况,运行也是正确的,如果想严谨一些,可以再自行加一些判断语句。主要理解 3K、3K+1、3K+2 如何翻译成代码形式
想看严谨版本的可以看week6的 大差不差
#include
int main()
{
int A1,A2,t,i=0;//初始化result,不为495即可
float A3;
A1=A2 = A3 = 0;
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
if(n%3==0&&n>A1) A1=n;
if(n%3==1) A2++;
if(n%3==2) { A3+=n; i++;}
}
printf("%d %d %.1f\n", A1, A2, A3/i);
}
希望大家可以早日消化好循环~