1. 迭代求立方根
源代碼:
#include <stdio.h>int main(){ double x,n; double y0,y1; while(scanf("%lf %lf",&x,&n)!=EOF) { if(n==0) //迭代次數為0,直接開3次方得結果 y0=x; else //迭代次數為n(n>=1) { y1=x; //y1初值=x while(n) //進行n次迭代 { y0= y1*2/3 + x/(3*y1*y1); //使用迭代式,結果賦給y0 y1=y0; //令y1等于上次迭代的結果 n--; } } PRintf("%lf/n",y0); //輸出最后一次(第n次)迭代的結果 } return 0;}程序截圖:
2. 數組排序
源代碼:
法一:利用排序算法+自定義輸出次序函數完成
#include <stdio.h>#define maxn 10010void Sort(int a[],int n){ int i,j,t; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } }}void Outputrank(int a[],int b[],int rank[],int n)//輸出數組元素排序次序 { int i,j=1; //j記錄次序 int p,q,num=0; //num記錄找到的元素個數 for(i=1;i<n;i++) //從第2個元素開始遍歷 { if(a[i]!=a[i-1]) //a[i]與a[i-1]不等,a[i]次序值比前者大1 { rank[i]=j+1; j++; } else //相等,則a[i]次序值與a[i-1]相等 rank[i]=rank[i-1]; } for(p=0;p<n;p++) //遍歷排序前與排序后的數組 { for(q=0;q<n;q++) { if(b[p]==a[q]) //排序后的數組中的元素在排序前數組中找到 { num++; //找到元素數+1 if(num==n) //找到最后一個元素,輸出次序并換行 printf("%d/n",rank[q]); else //否則輸出次序加一個空格 printf("%d ",rank[q]); break; //找到,不再繼續查找后續元素 } } }}int main(){ int i,n; int a[maxn],b[maxn],rank[maxn]={1}; //三個數組分別存放輸入數據 排序后數據 排序次序(開始全部初始化為1) while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } Sort(a,n); //對a數組冒泡排序 Outputrank(a,b,rank,n); //輸出數組元素排序次序 } return 0;}法二:利用排序算法+折半查找算法完成,效率有一定提高
#include <stdio.h>#define maxn 10010int HalfFind(int a[],int n,int x) //折半查找元素x { int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(a[mid]==x) //找到返回元素x的下標 return mid+1; else if(a[mid]<x) low=mid+1; else high=mid-1; }}void Sort(int a[],int n){ int i,j,t; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } }}int main(){ int i,n,t; int a[maxn],b[maxn],rank[maxn]; //三個數組分別存放輸入數據 排序后數據 排序次序 while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } Sort(b,n); //對b數組冒泡排序 t=0; for(i=0;i<n-1;i++) //刪除排好序的b數組中的重復元素 { if(b[i]!=b[i+1]) //t記錄排序次序 rank[t++]=b[i]; } rank[t++]=b[n-1]; //把b數組最后一個元素作為rank數組的最后一個元素 for(i=0;i<n;i++) //在rank數組中查找a數組(原始數組)中的元素,依次輸出各元素下標 { if(i!=n-1) printf("%d ",HalfFind(rank,t,a[i])); else printf("%d/n",HalfFind(rank,t,a[i])); } } return 0;}程序截圖:
3. 字符串的查找刪除
時間限制:1 秒
內存限制:32 兆
特殊判題:否
提交:5217
解決:2147
題目描述:給定一個短字符串(不含空格),再給定若干字符串,在這些字符串中刪除所含有的短字符串。
輸入:輸入只有1組數據。輸入一個短字符串(不含空格),再輸入若干字符串直到文件結束為止。
輸出:刪除輸入的短字符串(不區分大小寫)并去掉空格,輸出。
樣例輸入:in#include int main(){printf(" Hi ");}樣例輸出:#cludetma(){prtf("Hi");}提示:注:將字符串中的In、IN、iN、in刪除。
源代碼:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#define maxlen 1001//以下三個數組分別記錄短字符串 若干個字符串 刪去指定字符后的若干行字符串 char str[maxlen],string[maxlen][maxlen],string2[maxlen][maxlen];int main(){ int i,j,k,n; int index=0; gets(str); while(gets(string[index])) { if(strcmp(string[index],"}") == 0) break; index++; } for(i=0;i<strlen(str);i++) //str大寫轉換為小寫 { if(str[i]>='A' && str[i]<='Z') str[i]+=32; } for(i=0;i<=index;i++) //一行一行處理 { for(j=0;j<strlen(string[i]);j++) { string2[i][j]=string[i][j]; //string復制到string2中 if(string[i][j]>='A' && string[i][j]<='Z') string[i][j]+=32; } j=0,k=0; //匹配處理 for(j=0,k=0;j<strlen(string[i]); ) //繼續比較后一字符 { if(string[i][j+k] == str[k]) { k++; if(k == strlen(str)) //匹配成功 j+=k; } else //重新開始新的一輪匹配 { if(string[i][j]!=' ') //去掉空格 printf("%c",string2[i][j]); j++; k=0; } } printf("/n"); } return 0;}程序截圖:
新聞熱點
疑難解答