1. Scenario:

image.png

  1. Explanation : 1.

    List<Account> accList = [SELECT Id, Name, Phone, (SELECT Id, Name, Phone FROM Contacts) FROM Account WHERE Phone != null AND CreatedDate = LAST_WEEK];
    
    		List<Contact> conList = new List<Contact>();
    
    		if (!accList.isEmpty()) {
    			for (Account acc : accList) {
    				if (!acc.Contacts.isEmpty()) {
    					for (Contact con : acc.Contacts) {
    						if (con.Phone == null) {
    							con.Phone = acc.Phone;
    							conList.add(con);
    						}
    					} 
    				}
    			}
    		}
    
    		if (!conList.isEmpty()) {
    			update conList;
    		}
    

    b.

    List<Account> accList = [SELECT Id, Name, Phone FROM Account WHERE CreatedDate = LAST_WEEK AND Phone != null];
    
    		Map<Id, Account> accIdToAccountMap = new Map<Id, Account> (accList);
    
    		/* Altearnate, you can use, 
    		Map<Id, Account> accIdToAccountMap = new Map<Id, Account> ();	
    		for ( Account acc : accList ) {
    			accIdToAccountMap.put(acc.Id, acc);
    		}
    		*/
    
    		List<Contact> conList = [SELECT Id, Name, Phone, AccountId FROM Contact WHERE AccountId IN:accIdToAccountMap.keySet()];
    
    		if (!conList.isEmpty()) {
    			List<Contact> conToBeUpdated = new List<Contact> ();
    			for (Contact con : conList) {
    				if (con.Phone == null) {
    					con.Phone = accIdToAccountMap.get(con.AccountId).Phone;
    					conToBeUpdated.add(con);
    				}				
    			}
    
    			update conToBeUpdated;
    		}