//已有一个已正序排好!!!的9个元素的数组
//今输入一个数要求按原来排序的规律将它插入数组中。
//样例输入
//1 7 8 17 23 24 59 62 101
//50
#include<stdio.h>
int main()
{
int a[10],i,m,t;//因为要插入一个数 所以共有十个数 下标为10
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
a[9]=0;//a[9]可以被赋给任何值
//因为下面会把一个数的值赋给a[9]
scanf("%d",&m);
if(m<=a[0])
t=0;
if(m>=a[8])
t=9;
for(i=0;i<9;i++)
{
if(m>=a[i]&&m<=a[i+1])
{
t=i+1;
break;//遇见一次就停止
}
}
for(i=9;i>t;i--)
{
a[i]=a[i-1];
}
a[t]=m;
for(i=0;i<10;i++)
{
printf("%d",a[i]);
printf("\n");
}
return 0;
}
//选择法排序
#include<stdio.h>
void getnum(int b[],int n);
void sort (int b[],int n);
void print(int b[],int n);
int main(void)
{
int a[100];
int n;
printf("请输入数组元素:");
scanf("%d",&n);
getnum(a,n);
sort(a,n);
return 0;
}
void getnum(int b[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
}
void sort(int b[],int n)
{
int i,k,j,a;
for(i=0;i<n-1;i++)
{
k=i;//原因是下边有一个要判断是否和i原来的值相等
//所以i的值不可以变 但是i的值还是要在需要判断和i值是否相等的地方之前用到
//所以要把的初始值赋给另一个变量
for(j=i+1;j<n;j++)
{
if(b[j]>b[k])
{
k=j;
}
}
if(k!=i)
{
a = b[k];
b[k] = b[i];
b[i] = a;
}
print(b,n);
putchar('\n');//一次换行
}
//print(b,n);放在这里只会出现最终结果
}
void print(int b[],int n)
{
int i;
for(i=0;i<5;i++)
{
printf("%d\t",b[i]);//\t是为了让数字之间有空隙
}
}
//写程序:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
//思路:观察这组数据,设第一项的分子为a,分母为b,则第一项为a/b,第二项为(a+b)/a,
//第三项为((a+b)+a)/(a+b),第四项为(((a+b)+a))+(a+b))/((a+b)+a)......
//总而言之,后一项的分子为前一项分子分母的和,后一项的分母为前一项的分子
#include<stdio.h>
int main(){
double Sn=0,an=0,n,i,t,a=2.0,b=1.0;//a为分子!!!b为分母!!!!!an为单项和值,Sn为总和
scanf("%lf",&n);
Sn=Sn+a/b;//第一项不在规律中,在循环前先加入
for(i=1;i<n;i++){
t=a;//因为a和b的值需要用到没有改变的所以要调用第三个参数 细品!!!
a=a+b;//将前一项的分子加分母给后一项的分子
b=t;//将前一项的分子给后一项的分母
an=a/b;
Sn=an;
}
printf("%0.2lf",Sn);
return 0;
//因为数列是分数形式,所以sum和分子分母数都要定义为浮点型
//且因为是赋值为浮点型,赋值的数一定要是小数
}
//求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。
//例如,n=5时=2+22+222+2222+22222,n由键盘输入
//注意解题思路!!!!!
//①首先回顾本题
//求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
//首先我们第一反应必然是循环,那么如何通过循环求解就是一个比较重要的问题了。
//第一步,列好C语言的基本格式:
#include<stdio.h>
int main(){
return 0;
}
//②第二步,确认变量,首先需要一个输入值,我们将其设置为n,
//需要一个输出值,我们设置为sum,再加上最后控制循环的变量i。三个变量就找到了,于是我们可以写出
#include<stdio.h>
int main(){
int n, i, sum = 0;
scanf("%d", &n);
for(i = 0; i < n; i++){
}
return 0;
}
//③相比有的同学很好奇为什么只用一个循环,而不是通过循环先求出单个的2, 22,222,2222,22222。
//然后再通过循环累加。这是因为其中存在着规律~
//从规律中,我们可以看到,个位的2出现过n次,而十位的出现过n-1次以此类推!
//这意味着其中有规律,有规律就意味着可以简化!
//于是我们思考一下,是否可以从最高为开始,比如说最高位只有一个2,然后两个,三个……
//是的,我们可以用公式来归纳!
//于是我们从最高为开始,依次补足!
#include<stdio.h>
int main(){
int n, i, sum = 0;
scanf("%d", &n);
for(i = 0; i < n; i++){
sum *= 10;
sum += 2 * (i+1);
}
printf("%d", sum);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
int magic;
int guess;
int counter = 0;
int ret;
char reply;
/*unsigned int seed;
printf("please enter seed:");
scanf("%u",&seed);
srand(seed);*/
srand(time(null));
//相当于对magic的赋值 控制随机数的范围
do
{
counter = 0;
magic = rand()%100+1;
do{
printf("please guess a magic number:");
ret = scanf("%d",&guess);
while (ret!=1)
{
while (getchar() !='\n');
//fflush(stdin);
printf("please guess a magic number:");
ret = scanf("%d",&guess);
}
counter++;
if(guess>magic)
{
printf("wrong!too big!\n");
}
else if(guess<magic)
{
printf("wrong!too small!\n");
}
else
{
printf("right!\n");
}
}while(guess!=magic&&counter<10);//不符合这个条件,程序会退出
printf("counter=%d\n",counter);
printf("do you want to continue (y/n or y/n)?");
scanf(" %c",&reply);
}while (reply == 'y'||reply == 'y');
return 0;
}
//#include <stdio.h>
////1.输出100-999的所有水仙花数
////水仙花数:个位数的三次方+十位数的三次方+百位数的三次方=本身
////int main(void)
////{
////
//// int i,a,b,c;
//// for(i=100;i<=999;i++){
//// a=i/100;//百位数
//// b=(i-a*100)/10;//十位数
//// c=i%10;//个位数
//// if(a*a*a+b*b*b+c*c*c==i){
//// printf("%d\n",i);
//// }
//// }
//// return 0;
////}
//
//
////2.输入10个数 输出最大值
////int main(void)
////{
//// int i;
//// float x,max;
//// printf("请输入第一个数:");
//// scanf("%f",&x);
//// max=x;
//// for(i=1;i<=9;i++){ //i<=9的原因是前边已有一个数现在只需要一个到9就可以了
//// printf("请输入第%d个数:",i+1);//i+1的原因是前边必须要有一个
//// scanf("%f",&x);
//// if(x>max)
//// max=x;
//// }
//// printf("10个数的最大值是:%.0f",max);
//// return 0;
////
////
////}
//
//
////3.由键盘输入一个正整数判断该数是否为完数
////完数:数本身=因子之和 因子不算本身
////int main(void)
////{
//// int number,sum,i;
//// printf("请输入一个正整数:");
//// scanf("%d",&number);
//// sum=0;
//// for(i=1;i<=number-1;i++){
//// if(number%i==0){
//// sum=sum+i;
//// }
//// if(number==sum){
//// printf("%d是完数\n",number);
//// }
//// else{
//// printf("%d不是完数\n",number);
//// }
////
////}
//
//
////4.分别判断从键盘上输入的字符 数字 大写字母 小写字母 然后输出他们的个数
////规定:从键盘上输入的个数是用户随意决定的
//int main(void)
//{
// int s1,s2,s3,s4;
// s1 = s2 = s3 = s4 = 0;
// char ch;
//
// for(ch=getchar();ch!='\n';ch=getchar()){//这句话可以改成for(;(ch=getcar())!='\n';)
// //中间的这句话是程序结束的条件
// if(ch>='A' && ch<='Z'){
// s1++;
// }
// else if(ch>='a' && ch<='z'){
// s2++;
// }
// else if(ch>'0' && ch<'9') {
// s3++;
// }
// else {
// s4++;
// }
// }
// printf("大写字母个数是%d\n小写字母个数是%d\n数字个数是%d\n其他数字个数是%d\n",s1,s2,s3,s4);
// return 0;
//}
//
////5.由键盘输入三个数,将其组合成一个整形数输出
////int main(void)
////{
//// int n=0,i;
//// char ch;
//// printf("输入3个数字:");
//// for(i=1;i<=3;i++){
//// scanf(" %c",&ch);//空格
//// n=n*10+ch-'0';
//// //先输入的数字*10+后输入的数字 依此类推
//// //一个字符型和一个字符型做运算会转换成整型值
//// //ch-'0'也可以换成ch-48 这两个都相当于他们对应的ASCII运算 结果是整形值是数字
//// //如果ch定义为int类型则也对和上边的区别是
//// //1.scanf(%d)%d前边不需要空格
//// //2.int如果连续输入123中间没有空格是会把123当作一个数字
//// //而char类型默认只可以读取一个数 123 中间没有空格也会当作3个数
//// }
//// printf("%d\n",n);
//// return 0;
////}
////6.由键盘输入一个正整数,判断其是否为素数
////素数:除了1和它本身没有其他的约数
////int main(void)
////{
//// int i,flag,number;
//// printf("请输入一个正整数:");
//// scanf("%d",&number);
//// flag = 1;
//// for(i=2;i<=number-1 && flag;i++)//i的初始值还有取值范围都取决于素数的定义
//// {
//// if(number%i==0)
//// {
//// flag=0;
//// }
//// if(flag)
//// {
//// printf("%d是素数\n",number);
//// }
//// else
//// {
//// printf("%d不是素数\n",number);
//// }
//// }
//// return 0;
////}
// //上边程序可以写成
// //while((i<=number-1) && (flag))
// //{
// // if(number%i!=0)
// // {
// // i++;//意思是循环直至不符合
// // }
// // else
// // {
// // flag = 0;
// // }
//
// //}
// //if (flag)
// //{
// // printf("%number是素数\n",number);
// //}
// //else
// //{
// // printf("%number不是素数\n",number);
// //}
// //return 0;
//
//
////7.求两个自然数的最大公约数和最小公倍数
////int main(void)
////{
//// int a,b,r,n,m;
//// printf("请输入两个整数:");
//// scanf("%d%d",&a,&b);
//// m=a,n=b;//把a b分别赋值给m n,是因为后边求最小公倍数会用到 a b原来的值
// //但求最大公约数的时候会改变ab的值 所以要先赋值
//// do
//// {
//// r=a%b;
//// a=b;//b第一次是自己本身后续都是这一次的余数
//// b=r;//a第一次是自己第二次是b的值以后的每一次都是上一次的余数
//// }while(r!=0);
//// printf("%d和%d的最大公约数是:%d\n",a);
//// printf("最小公倍数是:%d\n",m*n/a);
//// return 0;
////
////
////
//////8.输入一个整数,统计该数的位数
////int main (void)
////{
////
//// long n,m;
//// int count = 0;
//// printf("请输入一个整数:");
//// scanf("%ld",&n);
//// m=n;
//// if(n<0)n=-n;
//// do
//// {
//// n=n/10;//注意方法!!!!
//// count++;
////
//// }while(n!=0);
//// printf("整数%ld有%d位数\n",m,count);
////}
//
////不理解为什么把n赋值给m ???
////将 n 的值赋给 m,是因为在后续的代码执行中,
////n 的值会被更改,如果我们需要输出原始的输入值,就需要一个备份,这时候 m 就起到了备份的作用。
////也就是说,m 保存的是原始的输入整数 n 的值,n 在后面的操作中可能会被修改
////但是 m 没有被修改。所以这时候输出 m,就能够输出最初的输入值了。
//
//
////9.求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。
////例如,n=5时=2+22+222+2222+22222,n由键盘输入。
////①首先回顾本题
////求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
////首先我们第一反应必然是循环,那么如何通过循环求解就是一个比较重要的问题了。
////第一步,列好C语言的基本格式:
//
////#include<stdio.h>
////int main(){
//// return 0;
////}
////②第二步,确认变量,首先需要一个输入值,我们将其设置为n,
////需要一个输出值,我们设置为sum,再加上最后控制循环的变量i。三个变量就找到了,于是我们可以写出
//
////#include<stdio.h>
//////int main(){
//// int n, i, sum = 0;
//// scanf("%d", &n);
//// for(i = 0; i < n; i++){
//// }
//// return 0;
////}
////相比有的同学很好奇为什么只用一个循环,而不是通过循环先求出单个的2, 22,222,2222,22222。
////然后再通过循环累加。这是因为其中存在着规律~
////从规律中,我们可以看到,个位的2出现过n次,而十位的出现过n-1次以此类推!
////这意味着其中有规律,有规律就意味着可以简化!
////于是我们思考一下,是否可以从最高为开始,比如说最高位只有一个2,然后两个,三个……
////是的,我们可以用公式来归纳!
////于是我们从最高为开始,依次补足!
//
////#include<stdio.h>
//////int main(){
//// int n, i, sum = 0;
//// scanf("%d", &n);
//// for(i = 0; i < n; i++){
//// sum *= 10;
//// sum += 2 * (i+1);
//// }
//// printf("%d", sum);
//// return 0;
////}
//
//
//
//
//
//写程序:一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。
//它在第N次落地时反弹多高?共经过多少米? 保留两位小数 要求保留 double类型
#include<stdio.h>
int main()
{
double m, h, ans;
int n;
scanf("%lf%d",&m,&n);
h = m / (1 << n);
ans = m + (m - h * 2) * 2;
printf("%.2lf %.2lf", h, ans);
return 0;
}