1···简要题意:输入一个百分制的成绩T,并将其转化成对应的等级。
思路:根据题目要求分为六个区间,依次输入和输出
细节:注意到是多组数据需要用while(scanf("%d",&n)!=EOF)语句,(n>=90&&n<=100)而不是(90<=n<=100)还有就是”A”
源码 : #include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n>=90&&n<=100)
cout<<"A"<<endl;
if(n>=80&&n<90)
cout<<"B"<<endl;
if(n>=70&&n<80)
cout<<"C"<<endl;
if(n>=60&&n<70)
cout<<"D"<<endl;
if(n>=0&&n<60)
cout<<"E"<<endl;
if(n>=101||n<0)
cout<<"Score is error!"<<endl;
}
return 0;
}
}2~~~简要题意:“水仙花数”是一个三位数,输入两个整数。还有就是水仙花的个数,如果在给定的区间内存在水仙花数,那么就需要从小到大排序;如果不存在水仙花数就输出no.
思路:据题目要求输入两个整数,水仙花数计数清零。计算水仙花数,判断他是水仙花数。在这个环境下,分析水仙花数的个数。
细节:s[1000]通常里面的数字要稍微取得大一点,注意到水仙花数是从m开始取得。并且别忘了输出空格以及乘号。
源码:#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int m,n;
while(cin>>m>>n)
{
int x=0;
int s[1000];
for(int i=m;i<=n;i++)
{
int a, b, c;
a=i/100;
b=i/10%10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
s[x]=i;
x++;
}
}
if(x==0) cout<<"no"<<endl;
else
{
for(int j=0;j<x;j++)
{
cout << s[j];
if(j<x-1) cout<<" ";
}
cout<<endl;
}
}
return 0;
}
3····简要题意:给定n个数据求所有奇数的乘积。输入多组数据,并且假定每组数据至少含有一个奇数。
思路:输入n,输入多组数据,确定初值奇数。
细节:初值为1,for循环中输入奇数。
源码:#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int n,i;
int a;
while(cin>>n)
{
int b=1;
for(i=1;i<=n;i++)
{
cin>>a;
if(a%2!=0)
b=b*a;
}
cout<<b<<endl;
}
return 0;
}
4···简要题意:求多项式的和。
思路:输入m组数据,前n项所以n分为奇数和偶数,输入i个数据j个数。
细节:注意到for(int i=1;i<=m;i++)运用了两次。等号==而不是=。
源码:#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int m,a[1000];
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
for(int i=1;i<=m;i++)
{
double s=0;
for(int j=1;j<=a[i];j++)
{
if(j%2==1) s=s+(double)1/j;
if(j%2==0) s=s-(double)1/j;
}
printf("%.2lf\n",s);
}
return 0;
}
5····简要题意:输入两个正整数,且每隔一个整数输出其平均值,最后不足这个固定整数的数按其实际数求其平均值并且输出。
思路:输入两个整数,定义求和,赋初始值,间隔是在增加的,判断间隔与m之间的关系。输出各个平均值。
细节:注意到num==m以及num=0,i<n*2,
源码:#include<stdio.h>
int main()
{
int n,m,i,sum,num;
while(scanf("%d %d",&n,&m)!=EOF)
{
num=0,sum=0;
for(i=2;i<=2*n;i+=2)
{
sum+=i;
num++;
if(num==m&&(i!=n*2))
{
printf("%d ",sum/num);
num-=m;
sum=0;
}
}
if(sum==0&&num==0) continue;
printf("%d\n",sum/num);
}
}
6```简要题意:输入一个十进制的数,并把它转化为R进制输出。
思路:分n大于零,n等于零,以及n小于零三种情况,并且弄清楚十进制转化成R进制一般是除以R.
细节:别忘了对零以及负数的单独判断,负数先转化成正数。对于0则直接输出0。
源码#include<stdio.h>
int main()
{
long n;
int a[1000],b,i,j,r;
while (scanf("%ld%d",&n,&r)!=EOF)
{
i=0;
if(n<0){n=-n;printf("-");}
if(n==0)
printf("0");
while(n>0)
{
b=n%r;
a[i++]=b;
n=n/r;
}
i=i-1;
for(j=i;j>=0;j--)
{
switch(a[j])
{
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default :printf("%d",a[j]);
}
}
printf("\n");
}
return 0;
}:
7–简要题意:输入多组数据判断该组数据是否是回文串。
思路:注意每次循环必须初始化,令c=0,strlen(a)表示字符串的长度,然后把字符数组a的内容倒序赋值给b,最后计算a,b中相等的个数,如果所有元素都相等则说明a中元素倒序排列后任相等。
细节:定义字符串的头文件为#include<cstring>,最后要换行输出。
源码:#include<stdio.h>
#include<string.h>
int main()
{
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++)
b[i]=a[length-1-i];
for(i=0;i<length;i++)
if (b[i]==a[i])
count++;
if(count==length)
printf("yes\n");
else printf("no\n");
}
}
return 0;
}
8-简要题意:猴子在接下来的每一天都吃该天内总桃子数的一半加一个,并且在第n天时还剩一个桃子。
思路:用逆推的思维既下一天的桃子数加一乘以二是前一天所剩的桃子数。:
细节:注意考虑到当n小于1并且n大于30时的情况。
源码:#include <stdio.h>
int main()
{
int n,sum=1,i;
while( scanf("%d",&n)!=EOF)
{
if( n<=1 || n>=30 )
break;
else
{
sum=1;
for( i=n; i>1; i-- )
{
sum = (sum+1)*2;
}
}
printf("%d\n",sum);
}
}
9-简要题意:输入若干组数据,每组数据包含两个整数,其中一个整数的末尾两位是未知的,但是该整数可以被另一个整数除尽。输出末尾的两数。
思路:先输入输出特殊的情况,
细节:if((c+i)%b==0)
源码:#include<stdio.h>
main()
{
int a,b,j,i,k,c,s[100];
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
j=0;
c=a*100;
for(i=0;i<100;i++)
if((c+i)%b==0)
{
s[j]=i;
j++;
}
for(k=0;k<j-1;k++)
printf("%.2d ",s[k]);
printf("%.2d\n",s[k]);
}
return 0;
}
10-简要题意:输入一些数值不超过10000,个数不超过50的正数,把一个偶数拆成两个不同的素数之和。输出拆法的个数。
思路:输入n,定义i,j
细节:if(a[i]+a[n–i]=n)
源码:#include<stdio.h>
int main()
{
int a[10000],n,i,j,m;
for(i=3;i<=10000;i++)
{
a[i]=i;
}
for(i=2;i<=10000;i++)
{
for(j=2*i;j<=10000;j+=i)
{
a[j]=0;}}
while(scanf("%d",&n)!=EOF&&n)
{
m=0;
for(i=3;2*i<n;i++)
if(a[i]+a[n-i]==n)
++m;
printf("%d\n",m);
}
}
11-简要题意:输入m行数据,每行数据包含两个整数。判断输入的数是否为亲和数。
思路:输入m以及两个整数,根据题意描述判断两个数是否为亲和数。
细节:定义sum(a)
if(sum(a)==b)
源码:#include<stdio.h>
int sum(int number)
{
int i;
int sum=0;
for(i=1;i<number;i++)
{
if(number%i==0)
sum=sum+i;
}
return sum;
}
int main()
{
int i,a,b,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
sum(a);
if(sum(a)==b)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
12-简要题意:输入多组包括菜种、单价和数量这三方面的数据,输出精度为1的所需支付花费的金额。
思路:根据题意定义数据,运用多组输入和数学计算求出值并输出。
细节:定义菜种但不计算,定义初始支付金额为0。
源码:#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
string c;
double a,b,sum;
sum=0;
while(cin>>c>>a>>b)
{
sum+=(a*b);
}
printf("%.1lf\n",sum);
return 0;
}
13-简要题意:输入一个长为11位的手机号码,把他转化成一个以6开头的短号码输出。
思路:按要求输入多组数据,定义字符,数据。
细节:scanf("%s",m)
printf("6%s\n",m+6)
源码:#include<stdio.h>
int main()
{
int n;
int i;
char m[12];
scanf("%d",&n);
while(n--)
{
scanf("%s",m);
printf("6%s\n",m+6);
}
return 0;
}
14-简要题意:把一个数x插入到从小到大排列好的n个整数中,使新的数列仍然有序。
思路:把m插入到数列中,若m小于它前面的数,则把m和它前面的数交换。既if(a[i]>m) {l=a[i]; a[i]=m; m=l}
细节:最后要换行输出,输入时输入多组数据。
源码:#include <stdio.h>
int main()
{
int n, x, a[100], i, j;
while(scanf("%d%d",&n,&x)&&(n||x))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(x<a[i])
break;
}
for(j=0;j<i;j++)
printf("%d ",a[j]);
printf("%d",x);
for(j=i;j<n;j++)
printf(" %d",a[j]);
printf("\n");
}
return 0;
}
15-简要题意:有一个m阶的楼梯,刚开始在第一级,若每次只能跨一级或两级,要走上第m级,求共有多少种方法。
思路:由于一开始就站在第一级上,故上第一级需要0步,上第二级需要一种走法,上第三级需要两种方法,当级数大于等于四级的时候可找到规律:a[i]=a[i–1]+a[i–2].
细节:输出换行,级数要小于M.
源码:#include<stdio.h>
int main()
{
int N=0,M=0,i=0,sum=0,a[41]={0};
scanf("%d",&N);
a[1]=1;
a[2]=1;
for(i=3;i<=40;i++)
a[i]=a[i-1]+a[i-2];
while(N--)
{
scanf("%d",&M);
printf("%d\n",a[M]);
}
return 1;
}
收获总结:
1、输入多组数据while(cin>>n)
2、断层求解找准范围,一般输入较大一点的数据范围。求解百位、十位以及个位的数是最后用求余的方法可能会更好。
3、数的几次方可以转化为几个数的相乘,而且不要忘了乘号不能省略。
4、要注意赋初值的情况,还有要讨论奇偶性的问题。
5、一般有特殊的情况的可以先考虑输入输出。
6、scanf()函数中,可用%md指定读取位数。