作業(yè)比賽編號 : 100000567 - 《算法筆記》2.3小節(jié)——C/C++快速入門->選擇結(jié)構(gòu)
C例題4-3 比較交換3個實(shí)數(shù)值插龄,并按序輸出
#include<stdio.h>
//最基礎(chǔ)的指針運(yùn)用于比較大小
void swap(double *a,double *b){
double temp;
temp=*a;
*a=*b;
*b=temp;
}
int main(){
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
double *p1=&a;
double *p2=&b;
double *p3=&c;
if(a>b) swap(p1,p2);
if(b>c) swap(p2,p3);
if(a>b) swap(p1,p2);
printf("%.2f %.2f %.2f\n",a,b,c);
return 0;
}
D習(xí)題4-4 三個整數(shù)求最大值
#include<stdio.h>
int max(int a,int b){
int result;
if(a>b) {
return a;
}else{
return b;
}
//如果想return一個值饲齐,則返回類型不能用void
}
int main(){
int a,b,c,m1,m2;
scanf("%d%d%d",&a,&b,&c);
m1=max(a,b);
m2=max(m1,c);
printf("%d\n",m2);
return 0;
}
E習(xí)題4-10-1 獎金計(jì)算
#include<stdio.h>
int main(){
double I,bonus;
scanf("%lf",&I);
if(I<=100000){
bonus=I*0.1;
}else if(100000<I&&I<=200000){
bonus=100000*0.1+(I-100000)*0.075;
}else if(200000<I&&I<=400000){
bonus=100000*0.1+100000*0.075+(I-200000)*0.05;
}else if(400000<I&&I<=600000){
bonus=100000*0.1+100000*0.075+200000*0.05+(I-400000)*0.03;
}else if(600000<I&&I<=1000000){
bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(I-600000)*0.015;
}else{
bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(I-1000000)*0.01;
}
printf("%.2f\n",bonus);
return 0;
}
作業(yè)比賽編號 : 100000568 - 《算法筆記》2.4小節(jié)——C/C++快速入門->循環(huán)結(jié)構(gòu)
A例題5-1-1 連續(xù)自然數(shù)求和
#include<stdio.h>
int main(){
int i=1,sum=0;
while(i<=100){
sum=sum+i;
i++;
}
printf("%d",sum);
return 0;
}
B例題5-1-2 連續(xù)自然數(shù)求和
#include<stdio.h>
int main(){
int i=1,sum=0;
do{
sum=sum+i;
i++;
}while(i<=100);
printf("%d",sum);
return 0;
}
C例題5-1-3 連續(xù)自然數(shù)求和
#include<stdio.h>
int main(){
int i,sum=0;
for(i=1;i<=100;i++){
sum=sum+i;
}
printf("%d",sum);
return 0;
}
D例題5-1-4 連續(xù)自然數(shù)求和
#include<stdio.h>
int main(){
//題目要求用break童漩,感覺是多此一舉
int i,n,sum=0;
scanf("%d",&n);
for(i=1;i<2*n;i++){
sum=sum+i;
if(i>=n) break;
}
printf("%d\n",sum);
return 0;
}
E例題5-1-5 連續(xù)自然數(shù)求和
#include<stdio.h>
int main() {
// 求1+2+3+...和的程序涩哟,要求得到使和數(shù)大于1000的最小正整數(shù)N。
int i, sum = 0;
for (i = 1; sum <= 1000; i++, sum += i);
printf("%d\n", i);-
return 0;
}
F例題5-6 矩陣輸出
#include<stdio.h>
int main(){
for(int i=1;i<=4;i++){
for(int j=1;j<=5;j++){
printf("%3d",i*j);
if (j==5){
printf("\n");
}
}
}
return 0;
}
G例題5-7 求圓周率pi的近似值(repeat)
需要注意的問題:
1.10的次方的表示方法:
#include<stdio.h>
#include<math.h>
/* 用如下公式 pi/4 = 1-1/3+1/5-1/7....求圓周率PI的近似值锤躁,直到發(fā)現(xiàn)某一項(xiàng)的絕對值
小于10-6為止(該項(xiàng)不累加)穆桂。
如果需要計(jì)算絕對值,可以使用C語言數(shù)學(xué)庫提供的函數(shù)fabs绰疤,如求x的絕對值,則為fabs(x).
輸出 PI=圓周率的近似值 輸出的結(jié)果總寬度占10位舞终,其中小數(shù)部分為8位轻庆。末尾輸出換行。 */
int main(){
double pi=0.0;
//term表示每一項(xiàng)权埠,如1榨了、-1/3、1/5等
for(double term = 1, i = 1, j = 3;fabs(term)>=1e-6;j+=2){
pi+=term;
i=-i;
term=i/j;
}
printf("PI=%10.8f\n",pi*4);
return 0;
}
H例題5-8 Fibonacci數(shù)列
參考:用數(shù)組和隊(duì)列的方法實(shí)現(xiàn)斐波那契數(shù)列
#include<stdio.h>
//方法一:遞歸
/*
輸入 一個不超過50的正整數(shù)
輸出 Fibonacci數(shù)列的第n個數(shù)攘蔽,末尾輸出換行
*/
int fibo(int n) {
if (n == 1 || n == 2) return 1;
else return fibo(n-2) + fibo(n-1);
}
int main(){
int N;
scanf("%d",&N);
printf("%d\n",fibo(N));
return 0;
}
/*
int整形的取值范圍是-2147483648~21474836479(-2^31~(2^31-1))
第46項(xiàng)之后,即從第47項(xiàng)開始呐粘,大小超出int的范圍
因此47項(xiàng)及以后按照此方法輸出的數(shù)都為負(fù)數(shù)
*/
I習(xí)題5-10 分?jǐn)?shù)序列求和
注意一點(diǎn):類型一致的問題
#include<stdio.h>
/*
有分?jǐn)?shù)序列:2/1满俗,3/2转捕,5/3,8/5唆垃,13/8五芝,21/13,...
求前20項(xiàng)的和
輸出 小數(shù)點(diǎn)后保留6 位小數(shù)辕万,末尾輸出換行
*/
double top(int n) {
if(n==1) return 2;
else if(n==2) return 3;
else return top(n-2)+top(n-1);
}
double bottom(int n) {
if(n==1) return 1;
else if(n==2) return 2;
else return bottom(n-2)+bottom(n-1);
}
int main(){
double sum=0.0;
for(int i=1;i<=20;i++){
sum+=top(i)/bottom(i);
/*如果在定義函數(shù)top和bottom時
用整型的話最后計(jì)算結(jié)果即使進(jìn)行強(qiáng)制類型轉(zhuǎn)化算出來的也是整數(shù)并且結(jié)果偏差較大
因此在定義函數(shù)時就應(yīng)該用double枢步,那么在main函數(shù)中也不必再進(jìn)行強(qiáng)制類型轉(zhuǎn)換了
*/
}
printf("%.6f\n",sum);
return 0;
}
作業(yè)比賽編號 : 100000569 - 《算法筆記》2.5小節(jié)——C/C++快速入門->數(shù)組
A | 習(xí)題6-4 有序插入(repeat)
注意:做這個題之前先搞懂插入排序
#include<stdio.h>
/*
輸入 第一行輸入以空格分隔的9個整數(shù),要求按照從小到大的順序輸入
第二行輸入一個整數(shù)渐尿,將此整數(shù)插入到前有序的9個數(shù)中醉途,
使得最終的10個數(shù)依然是從小到大有序的
輸出 從小到大輸出這10個數(shù),每個數(shù)一行
提示 定義數(shù)組時砖茸,把數(shù)組長度定義為10
*/
int main(){
int a[10],temp;
int j=10;
//一次性向數(shù)組中輸入幾個數(shù)字中間用空格需要利用循環(huán)
for(int i=1;i<=9;i++){
scanf("%d",&a[i]);
}
scanf("%d",&temp);
/*
類似插入排序
但由于前面9個數(shù)是已經(jīng)按照大小順序排好了
所以只需要比較一趟
具體比較辦法是從后往前枚舉已有序部分來確定插入的位置
*/
while(j>1 && temp<a[j-1]){
a[j]=a[j-1];
j--;
}
a[j]=temp;
for(int i=1;i<=10;i++){
printf("%d\n",a[i]);
}
return 0;
}
B | 習(xí)題6-5 數(shù)組元素逆置
#include<stdio.h>
/*
將一個長度為10的整數(shù)數(shù)組中的值按逆序重新存放
輸入 以空格分隔的10個整數(shù)
輸出 按相反的順序輸出這10個數(shù)隘擎,每個數(shù)占一行
*/
int main(){
int str[10],temp;
for(int i=0;i<=9;i++){
scanf("%d",&str[i]);
}
for(int i=0;i<=4;i++){
temp=str[i]; //temp暫存str[i]的值
str[i]=str[9-i];
str[9-i]=temp;
}
for(int i=0;i<=9;i++){
printf("%d\n",str[i]);
}
return 0;
}
C | 習(xí)題6-6 楊輝三角(repeat)
#include<stdio.h>
/*
輸入 正整數(shù)n,表示將要輸出的楊輝三角的層數(shù)
輸出 輸出n層楊輝三角凉夯,每一層的整數(shù)之間用一個空格隔開货葬,最多輸出10層
*/
/*
思路:開兩個數(shù)組,a[10] 和temp[10]
temp用于臨時存放由a推導(dǎo)出的下一層
然后某一層推導(dǎo)并打印過后再將temp中的數(shù)據(jù)存入a中
*/
int main(){
int n, a[10] = {1, 1};
scanf("%d",&n);
for (int i=1; i<=n; i++){
if (i == 1) printf("%d\n", a[0]);
else if (i == 2) printf("%d %d\n", a[0], a[1]);
else { /*打印第一劲够、二層以外的其他層*/
int temp[10];
temp[0] = 1;
temp[i-1] = 1;
int j;
for (int j=1; j<=i-2; j++){
temp[j] = a[j-1] + a[j];
}
/*打印這一層*/
for (int k=0; k<=i-1; k++){
printf("%d ",temp[k]);
}
printf("\n");
/*更新a[10]即是將temp存入數(shù)組a中震桶,以供下一次循環(huán)使用*/
for (int m=0; m<=i-1; m++){
a[m] = temp[m];
}
}
}
return 0;
}
D | 習(xí)題6-12 解密
#include<stdio.h>
#include<string.h>
/*
輸入 一行密文
輸出 解密后的原文,單獨(dú)占一行
加密原則:第一個字母變成第26個字母征绎,
第i個字母變成第(26-i+1)個字母
非字符字符不變
*/
int main() {
char a[100];
gets(a);
for (int i=0; i<=strlen(a); i++) {
/*利用ASCII*/
if (a[i] >= 65 && a[i] <= 90) {
a[i] = 155 - a[i]; //A~Z:65~90
} else if (a[i] >=97 && a[i] <= 122) {
a[i] = 219 - a[i]; //a~z:97~122
}
}
puts(a);
return 0;
}
E | 習(xí)題6-13 字符串比較
#include<stdio.h>
#include<string.h>
/* 比較兩個字符串s1和s2的大小蹲姐,如果s1>s2,則輸出一個正數(shù);
若s1=s2炒瘸,則輸出0淤堵;若s1<s2,則輸出一個負(fù)數(shù)顷扩。
要求:不用strcpy函數(shù)拐邪;兩個字符串用gets函數(shù)讀入。
輸入 輸入2行字符串
輸出 一個整數(shù)隘截,表示這兩個字符串 比較的差值扎阶,單獨(dú)占一行。*/
int main() {
char str1[100],str2[100];
gets(str1);
gets(str2);
int result;
int L = strlen(str1) < strlen(str2) ? strlen(str1) : strlen(str2);
for (int i = 0; i < L; i++) {
result = str1[i] - str2[i];
if (result != 0) break;
}
printf("%d\n", result);
return 0;
}
F | 例題6-1 逆序輸出數(shù)組元素
#include<stdio.h>
/*
輸入 10個整數(shù)(存儲在一個長度為10的整形數(shù)組中)婶芭,以空格分隔
輸出 將輸入的10個整數(shù)逆序輸出东臀,每個數(shù)占一行
*/
int main() {
int a[10],temp;
for (int i = 0; i <= 9; i++) {
scanf("%d", &a[i]);
}
for (int i=0; i <=4; i++) {
temp = a[i];
a[i] = a[9-i];
a[9-i] = temp;
}
for (int i = 0; i <= 9; i++) {
printf("%d\n", a[i]);
}
return 0;
}
G | 例題6-2 數(shù)組求解Fibonacci數(shù)列問題
#include<stdio.h>
/*
要求用數(shù)組求解 Fibonacci數(shù)列
輸出 Fibonacci數(shù)列的前20個數(shù),每個數(shù)占一行
*/
int main() {
int a[100];
a[0] = 1;
a[1] = 1;
for (int i = 2; i <=19; i++) {
a[i] = a[i-2] + a[i-1];
}
for(int i = 0; i <=19; i++) {
printf("%d\n", a[i]);
}
}
H | 例題6-3 冒泡排序
#include<stdio.h>
/*
冒泡排序
輸入 以空格分隔的10個整數(shù)
輸出 依次輸出排好序的10個整數(shù)犀农,每個數(shù)占一行
*/
int main() {
int a[10];
for (int i=0; i<=9; i++) {
scanf("%d",&a[i]);
}
for (int i=1; i<=9; i++) { //10個數(shù)比較9躺
//每一趟從a[0]到a[10-j-1]都要與后面一個數(shù)比較
//例如:第一趟時惰赋,從a[0]到a[8]都需要和后面一個數(shù)進(jìn)行比較,8=10-1-1
for (int j=0; j<=10-i-1; j++) {
if (a[j] > a[j+1]) {
int temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
for (int i=0; i<=9; i++) {
printf("%d\n",a[i]);
}
return 0;
}
I | 例題6-4 矩陣轉(zhuǎn)置
J | 例題6-9 字符串求最大值(repeat)
#include<stdio.h>
#include<string.h>
/*
輸入 3行字符串,每行均為一個字符串
輸出 一行赁濒,輸出三個字符串中的最大者
*/
int main() {
//使用strcmp()和strcpy()
char str1[50], str2[50], str3[50],max[50];
gets(str1);
gets(str2);
gets(str3);
if (strcmp(str1, str2) > 0) {
strcpy(max, str1);
}else {
strcpy(max, str2);
}
if (strcmp(max, str3) < 0) {
strcpy(max, str3);
}
puts(max);
return 0;
}